一、两种路径语法概览

语法类型触发标志简介
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先生负责为一家新开的博物馆设计安保监控系统。博物馆有多个展厅需要监控,每个展厅都有不同的面积。现在有多种型号的监控摄像头可供选择,每…