JSON.SET

语法
JSON.SET key path value [NX | XX]
可用版本
Redis 开源版 / JSON 1.0.0
时间复杂度
当 path 评估为单个值时,复杂度为 O(M+N),其中 M 是原始值(如果存在)的大小,N 是新值的大小;当 path 评估为多个值时,复杂度为 O(M+N),其中 M 是 key 的大小,N 是新值的大小 * key 中原始值的数量
ACL 类别
@json, @write, @slow,

设置 keypath 处的 JSON 值

示例

必需参数

key

要修改的 key。

path

指定 JSONPath。默认是根节点 $。对于新的 Redis key,path 必须是根节点。对于现有的 key,当整个 path 存在时,其包含的值会被 json 值替换。对于现有的 key,当 path 存在,但最后一个元素除外时,将添加一个新子节点,其值为 json 值。

仅当它是 path 中的最后一个子节点,或者它是 path 中正在添加的新子节点的父节点时,才将 key(及其对应值)添加到 JSON 对象(在 RedisJSON 数据类型 key 中)。可选参数 NXXX 会修改此行为,对新的 RedisJSON 数据类型 key 和其中的 JSON 对象 key 都生效。

value

要在指定 path 处设置的值

可选参数

NX

仅当 key 不存在时才设置。

XX

仅当 key 已经存在时才设置。

返回值

返回以下回复之一

  • 简单字符串回复:如果执行成功则返回 OK
  • nil
    • 如果 key 存在但 path 不存在且无法创建
    • 如果 NXXX 条件未满足
  • 如果 key 不存在且 path 不是根节点 (.$) 则报错

有关回复的更多信息,请参阅 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}]"
更新多个 path
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 不存在且无法创建
redis> JSON.SET doc $ 1
OK
redis> JSON.SET doc $.x.y 2
(nil)
XX 条件未满足
redis> JSON.SET nonexistentkey $ 5 XX
(nil)
redis> JSON.GET nonexistentkey
(nil)
key 不存在且 path 不是根节点
redis> JSON.SET nonexistentkey $.x 5
(error) ERR new objects must be created at the root

另请参阅

JSON.GET | JSON.MGET


评价本页
返回顶部 ↑
© . This site is unofficial and not affiliated with Redis, Inc.