JSON.SET
语法
JSON.SET key path value [NX | XX]
- 可用
- Redis Stack / JSON 1.0.0
- 时间复杂度
- 当路径评估为单个值时为 O(M+N),其中 M 是原始值的大小(如果存在),而 N 是新值的大小,当路径评估为多个值时为 O(M+N),其中 M 是键的大小,而 N 是新值的大小乘以键中原始值的个数
在 key
中的 path
设置 JSON 值
必需参数
key
是要修改的键。
path
是用于指定的 JSONPath。默认情况下为根 $
。对于新的 Redis 键,path
必须是根。对于现有键,当整个 path
存在时,它包含的值将替换为 json
值。对于现有键,当 path
存在时,除了最后一个元素外,将使用 json
值添加一个新的子级。
仅当它是 path
中的最后一个子级,或者它是 path
中正在添加的新子级的父级时,才将键(及其相应的值)添加到 JSON 对象(在 RedisJSON 数据类型键中)。可选参数 NX
和 XX
会修改此行为,适用于新的 RedisJSON 数据类型键以及其中的 JSON 对象键。
value
是要在指定路径设置的值。
可选参数
NX
仅当键不存在时才设置键。
XX
仅当键已存在时才设置键。
返回值
JSET.SET 返回一个简单的字符串回复:OK
表示执行成功,或者 nil
表示指定的 NX
或 XX
条件未满足。有关回复的更多信息,请参阅 Redis 序列化协议规范.
示例
替换现有值
redis> JSON.SET doc $ '{"a":2}'
OK
redis> JSON.SET doc $.a '3'
OK
redis> JSON.GET doc $
"[{\"a\":3}]"
添加新值
redis> JSON.SET doc $ '{"a":2}'
OK
redis> JSON.SET doc $.b '8'
OK
redis> JSON.GET doc $
"[{\"a\":2,\"b\":8}]"
更新多路径
redis> JSON.SET doc $ '{"f1": {"a":1}, "f2":{"a":2}}'
OK
redis> JSON.SET doc $..a 3
OK
redis> JSON.GET doc
"{\"f1\":{\"a\":3},\"f2\":{\"a\":3}}"