RedisJSON 路徑語法深度解析與實戰

一、兩種路徑語法概覽

語法類型觸發標志簡介
JSONPath$ 開頭全功能路徑,支持遞歸 (..)、通配符 (*)、切片 ([start:end:step])、過濾 (?())、腳本表達式等
Legacy. 或鍵名開頭早期版本(v1)遺留語法,只支持簡單的點式和中括號,不支持通配符/過濾

RedisJSON 會根據第一個字符自動判斷:

  • $ 開頭 → JSONPath
  • 否則 → Legacy

二、JSONPath 語法要點

語法功能
$根節點
.[]直接子節點選擇
..遞歸搜索,匹配任意層級的同名字段
*通配符,匹配當前節點下所有子元素
[i]數組下標,支持負數(-1 表示最后一個)
[start:end:step]數組切片,如 [0:2][:3][::2]
[?()]過濾表達式,支持比較運算符 ==,!=,<,<=,>,>=,=~ 以及邏輯運算 `&&,`
@當前元素引用,在過濾器內用 @.field 訪問
()腳本表達式

提示:在 CLI 中,整個 JSONPath 通常要用單引號包裹,以免 Shell 把 $* 等展開。

三、Legacy 語法要點

  • 以點號 . 或直接鍵名開頭(可省略根節點 .
  • 支持 a.b.ca["key-with-special"]a[0]a[-1]
  • 不支持通配符、遞歸、切片、過濾等高級特性

四、實戰示例

假設已在 Redis 中載入以下文檔(鍵名 bikes:inventory,見你的示例):

# 省略 JSON.SET 代碼,假設文檔已存在

1. 基本查詢

# 獲取整個 inventory 下所有子數組(mountain_bikes、commuter_bikes)
JSON.GET bikes:inventory '$.inventory.*'

2. 提取所有山地車型號

JSON.GET bikes:inventory '$.inventory.mountain_bikes[*].model'
# 或
JSON.GET bikes:inventory '$..mountain_bikes[*].model'
# 返回 ["Phoebe","Quaoar","Weywot"]

3. 遞歸查詢

# 查找所有 model 字段
JSON.GET bikes:inventory '$..model'
# 返回 ["Phoebe","Quaoar","Weywot","Salacia","Mimas"]

4. 數組切片

# 前兩個山地車
JSON.GET bikes:inventory '$.inventory.mountain_bikes[0:2].model'
# 返回 ["Phoebe","Quaoar"]

5. 過濾表達式

# 價格 < 3000 且 重量 < 10 的山地車
JSON.GET bikes:inventory '$..mountain_bikes[?(@.price < 3000 && @.specs.weight < 10)]'
# 材料為 alloy 的所有車型型號
JSON.GET bikes:inventory '$..[?(@.specs.material == "alloy")].model'
# 返回 ["Weywot","Mimas"]
# 正則匹配材料以 "al-" 開頭(v2.4.2+ 支持 =~)
JSON.GET bikes:inventory '$..[?(@.specs.material =~ "(?i)al")].model'
# 返回 ["Quaoar","Weywot","Salacia","Mimas"]

6. 更新與增刪

# 所有價格統一減 100 / 加 100
JSON.NUMINCRBY bikes:inventory '$..price' -100
JSON.NUMINCRBY bikes:inventory '$..price'  100
# 對價格 <2000 的車型,設為 1500
JSON.SET bikes:inventory '$.inventory.*[?(@.price<2000)].price' 1500
# 向所有價格 <2000 的 colors 數組追加 "pink"
JSON.ARRAPPEND bikes:inventory '$.inventory.*[?(@.price<2000)].colors' '"pink"'

五、Legacy 語法示例

# 等同于 $.inventory.mountain_bikes[0].model
JSON.GET bikes:inventory .inventory.mountain_bikes[0].model
# 或
JSON.GET bikes:inventory inventory["mountain_bikes"][1].model

六、性能與注意事項

  1. 定位開銷:路徑深度越深、對象鍵越多、過濾條件越復雜,查詢時間越長;推薦預先 JSON.GET 小范圍字段或使用聚合后端做二次過濾。

  2. 過濾器正則=~ 支持 PCRE 風格,默認部分匹配,需精確匹配請在模式前后加 ^$

  3. 路徑返回格式

    • 單路徑 → 頂層返回數組
    • 多路徑 → 返回對象,每個路徑對應一個數組
  4. CLI 轉義:Windows PowerShell 與 Bash 對引號處理不同,必要時可多層轉義或改用客戶端 SDK。

通過掌握上述示例與要點,你就能靈活使用 RedisJSON 強大的路徑查詢和更新能力,實現對嵌套 JSON 的高效操作。祝編程愉快!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/88485.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/88485.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/88485.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

從Rust模塊化探索到DLB 2.0實踐|得物技術

一、前言在云原生架構高速迭代的背景下&#xff0c;基礎設施的性能瓶頸與安全隱患成為技術演進的關鍵挑戰。本文系統記錄了團隊基于Rust語言改造Nginx組件的完整技術路徑&#xff1a;從接觸Cloudflare的quiche庫&#xff0c;引發對Rust安全特性的探索&#xff0c;到通過FFI實現…

【 MySQL】一點點相關的記錄

打開 MySQL Workbench 并連接到你的數據庫在 MySQL Connections 下&#xff0c;選擇連接的數據庫實例&#xff08; Local instance MySQL80&#xff09;登錄時輸入 用戶名 和 密碼。 root&#xff0c;密碼是在 MySQL 安裝時設置的密碼創建新數據庫登錄后&#xff0c;在 MySQL W…

旅游企業如何通過數字化轉型實現高效運營

在旅游行業競爭日益激烈、游客需求日趨多樣的當下&#xff0c;數字化管理成為旅游企業提升競爭力的關鍵協同辦公系統以其豐富功能與靈活特性&#xff0c;為旅游行業帶來全新的數字化變革&#xff0c;助力企業高效運營。優化行程規劃與調度旅游行程的規劃與調度繁雜且關鍵。協同…

大數據Spark(六十二):Spark基于Yarn提交任務流程

文章目錄 Spark基于Yarn提交任務流程 一、Yarn-Client模式 1、提交命令 2、任務執行流程 二、Yarn-Cluster模式 1、提交命令 2、任務執行流程 Spark基于Yarn提交任務流程 在Yarn模式下&#xff0c;Spark的任務提交同樣根據Driver程序運行的位置不同&#xff0c;分為cli…

Docker 高級管理-容器通信技術與數據持久化

(1)創建一個叫 my-net 的 bridge 類型的網絡(2)查看都有哪些網絡(3)運行一個容器井連接到新建的 my-net 網絡(4)運行一個容器井加入到 my-net 網絡2:Host 模式由于使用了 Host 模式&#xff0c;容器會直接使用宿主機的網絡端口&#xff0c;因此可以直接在宿主機上通過 localhos…

在 Ubuntu 24.04 中安裝 Python 2.7、pip 及 mysqlclient==1.4.6 的完整指南

在 Ubuntu 24.04 中安裝 Python 2.7、pip 及 mysqlclient1.4.6 的完整指南 前言 隨著 Ubuntu 24.04 的發布&#xff0c;許多舊的軟件包已被移除或更新&#xff0c;但老項目需要 Python 2 。本文將詳細介紹自己如何在 Ubuntu 24.04 中成功安裝 Python 2.7、pip 以及 mysqlclient…

doker以及網站案例

一.docker搭建1.安裝dockerapt-get install docker.io docker-compose2.編寫配置文件&#xff08;注意路徑正確&#xff09;vim /etc/systemd/system/docker.service.d/http-proxy.conf[Service] Environment"HTTP_PROXYhttp://科學上網訪問的ip:端口" Environment&q…

【HarmonyOS Next之旅】DevEco Studio使用指南(四十一) -> 獲取自定義編譯參數

目錄 1 -> HAP/HSP運行時獲取編譯構建參數 1.1 -> 生成BuildProfile類文件 1.2 -> 在代碼中獲取構建參數 1.3 -> 默認參數 1.4 -> 自定義參數 2 -> HAR運行時獲取編譯構建參數 2.1 -> 生成BuildProfile類文件 2.2 -> 在代碼中獲取構建參數 2.…

NGINX系統基于PHP部署應用

目錄 部署 配置 部署 準備三臺主機&#xff0c;一臺服務端&#xff0c;兩臺客戶端&#xff1b; 1.在兩臺客戶端主機上分別安裝 MySQL; [rootmaster /]#yum install -y mysql nginx; [rootmaster /]#yum install -y nginx PHP; [rootmaster /]#yum install -y php PHP-m…

ip地址可以精確到什么級別?如何獲取/更改ip地址

IP地址的精確級別和獲取/更改方式取決于其類型&#xff08;公網IP vs 內網IP&#xff09;&#xff0c;以下是詳細解答&#xff1a; 一、IP地址的精確級別 1. 公網IP地址&#xff08;互聯網可見&#xff09; 定位級別精度范圍說明國家/地區級約95%準確通過IP數據庫&#xff08;…

Linux(Centos 7.6)命令詳解:useradd

1.命令作用創建新用戶或更新默認的新用戶信息(create a new user or update default new user information)2.命令語法Usage: useradd [options] LOGINuseradd -Duseradd -D [options]3.參數詳解OPTION:-b, --base-dir BASE_DIR&#xff0c;新帳戶的主目錄的基本目錄&#xff1…

異步I/O庫:libuv、libev、libevent與libeio

異步I/O編程是現代高性能網絡服務的核心&#xff0c;而libuv、libev、libevent、libeio這四個庫則是這一領域的常青樹。它們雖同屬事件驅動模型&#xff0c;卻在設計哲學、適用場景和實現細節上各具特色。本文將深入剖析其異同。 一、共同點&#xff1a;異步事件驅動 事件循環&…

go go go 出發咯 - go web開發入門系列(四) 數據庫ORM框架集成與解讀

go go go 出發咯 - go web開發入門系列&#xff08;四&#xff09; 數據庫ORM框架集成與解讀 往期回顧 go go go 出發咯 - go web開發入門系列&#xff08;一&#xff09; helloworldgo go go 出發咯 - go web開發入門系列&#xff08;二&#xff09; Gin 框架實戰指南go go g…

CD47.【C++ Dev】list的模擬實現(2)

目錄 1.const修飾的迭代器的實現 方法1:分成兩個類 完整代碼 方法2:STL庫的寫法 2.STL庫的第三個模版參數T*的解釋 ->->的簡寫語法 3.其他成員函數 insert erase push_back、push_front、pop_front、pop_back size clear 析構函數~list() 拷貝構造函數(★…

UI前端與數字孿生融合新領域拓展:智慧教育的虛擬實驗室建設

hello寶子們...我們是艾斯視覺擅長ui設計、前端開發、數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩!一、引言&#xff1a;虛擬實驗室 —— 打破教育邊界的技術革命傳統實驗教學正面臨 “設備昂貴、…

7. TCP 和 UDP 的區別

總結 TCP 面向連接&#xff0c;需要三次握手建立連接&#xff0c;UDP 無連接&#xff0c;不需要握手&#xff0c;直接發送數據。UDP 有較好的實時性&#xff0c;效率比 TCP 高。TCP 面向字節流&#xff0c;實際上是 TCP 把數據看成一連串無結構的字節流&#xff0c;UDP 是面向報…

iOS Widget 開發-7:TimelineProvider 機制全解析:構建未來時間線

在 WidgetKit 中&#xff0c;TimelineProvider 是小組件生命周期的核心機制之一。它控制著 數據獲取時機、展示內容 與 刷新策略&#xff0c;是實現時間驅動內容更新的基礎。 本文將介紹 TimelineProvider 的工作原理、設計模式、常見場景與高級用法&#xff0c;幫助大家構建智…

基于PHP/MySQL的企業培訓考試系統源碼,高并發、穩定運行,源碼開源可二開

溫馨提示&#xff1a;文末有資源獲取方式這是一款專為企業設計的開源培訓考試系統&#xff0c;采用PHPMySQL技術棧開發&#xff0c;具有高并發處理能力和穩定運行特性。系統源碼完全開放&#xff0c;支持二次開發&#xff0c;可滿足各類企業的培訓考核需求。核心功能特點1. 高性…

時序數據庫InfluxDB

一.定義 時序數據庫 是一種專門用于高效存儲和查詢帶有時間戳的數據的數據庫。如果你的數據是隨著時間變化而不斷產生&#xff0c;并且你想知道過去某一時刻發生了什么&#xff0c;那么你應該用時序數據庫。 這類數據通常具有以下特征&#xff1a; 數據點按時間順序不斷寫入…

2025.07.09華為機考真題解析-第三題300分

?? 點擊直達筆試專欄 ??《大廠筆試突圍》 ?? 春秋招筆試突圍在線OJ ?? 筆試突圍OJ 03. 博物館安保攝像頭配置 問題描述 A先生負責為一家新開的博物館設計安保監控系統。博物館有多個展廳需要監控,每個展廳都有不同的面積。現在有多種型號的監控攝像頭可供選擇,每…