JSON 的 JSON 格式。设置
语法
JSON.SET key path value [NX | XX]
- 可用:
- Redis 堆栈 / JSON 1.0.0
- 时间复杂度:
- O(M+N) 当 path 计算为单个值时,其中 M 是原始值的大小(如果存在),N 是新值的大小,O(M+N) 当 path 计算为多个值时,其中 M 是键的大小,N 是新值的大小 * 键中原始值的数量
将 JSON 值设置为path
在key
必需参数
key
是修改的关键。
path
是 JSONPath 来指定。默认值为 root 。对于新的 Redis 键,$
path
必须是根。对于现有键,当整个path
exists,则它包含的值将替换为json
价值。对于现有键,当path
存在,则除了最后一个元素外,还会添加一个新的子元素,其中包含json
价值。
仅当键是 JSON Object 中的 最后一个子项时,才将键(及其各自的值)添加到 JSON 对象(在 RedisJSON 数据类型键中)。path
,或者它是添加到path
.可选参数NX
和XX
修改新 RedisJSON 数据类型键以及其中的 JSON 对象键的此行为。
value
is 值
可选参数
NX
仅当 key 尚不存在时,才设置该键。
XX
仅当键已存在时,才设置该键。
返回值
返回以下回复之一:
- 一个简单的字符串回复:
OK
如果执行正确 nil
- 如果
key
存在,但path
不存在且无法创建 - 如果
NX
或XX
条件未满足
- 如果
- error 如果
key
不存在且path
不是 root (.
或$
)
有关回复的更多信息,请参阅 Redis 序列化协议规范。
例子
替换现有值
redis> JSON.SET doc $ '{"a":2}'
OK
redis> JSON.SET doc $.a '3'
OK
redis> JSON.GET doc $
"[{\"a\":3}]"
Add a new value
redis> JSON.SET doc $ '{"a":2}'
OK
redis> JSON.SET doc $.b '8'
OK
redis> JSON.GET doc $
"[{\"a\":2,\"b\":8}]"
Update multi-paths
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}}"
path does not exist and cannot be created
redis> JSON.SET doc $ 1
OK
redis> JSON.SET doc $.x.y 2
(nil)
XX condition unmet
redis> JSON.SET nonexistentkey $ 5 XX
(nil)
redis> JSON.GET nonexistentkey
(nil)
key does not exist and path is not root
redis> JSON.SET nonexistentkey $.x 5
(error) ERR new objects must be created at the root
See also
Related topics