JSON.MSET

用法
JSON.MSET key path json [ key path json ... ]
复杂度
O(N),其中 N 是键的数量
模块
valkey-json
模块版本要求
1.0.0
ACL 类别
@write, @slow, @json, @slow

为多个键设置 JSON 值。该操作是原子性的。要么所有值都被设置,要么一个都没有被设置。

  • 如果路径指向一个对象成员
    • 如果父元素不存在,命令将返回 NONEXISTENT 错误。
    • 如果父元素存在但不是一个对象,命令将返回 ERROR。
    • 如果父元素存在且是一个对象
      • 如果成员不存在,当且仅当父对象是路径中的最后一个子节点时,新成员将被添加到父对象中。否则,命令将返回 NONEXISTENT 错误。
      • 如果成员存在,其值将被替换为新的 JSON 值。
  • 如果路径指向一个数组索引
    • 如果父元素不存在,命令将返回 NONEXISTENT 错误。
    • 如果父元素存在但不是一个数组,命令将返回 ERROR。
    • 如果父元素存在但索引超出范围,命令将返回 OUTOFBOUNDARIES 错误。
    • 如果父元素存在且索引有效,该元素将被替换为新的 JSON 值。
  • 如果路径指向一个对象或数组,该值(对象或数组)将被替换为新的 JSON 值。

示例

增强路径语法

127.0.0.1:6379> JSON.MSET k1 . '[1,2,3,4,5]' k2 . '{"a":{"a":1, "b":2, "c":3}}' k3 . '{"a": [1,2,3,4,5]}'
OK
127.0.0.1:6379> JSON.GET k1
"[1,2,3,4,5]"
127.0.0.1:6379> JSON.GET k2
"{\"a\":{\"a\":1,\"b\":2,\"c\":3}}"
127.0.0.1:6379> JSON.MSET k2 $.a.* '0' k3 $.a[*] '0'
OK
127.0.0.1:6379> JSON.GET k2
"{\"a\":{\"a\":0,\"b\":0,\"c\":0}}"
127.0.0.1:6379> JSON.GET k3
"{\"a\":[0,0,0,0,0]}"

受限路径语法

127.0.0.1:6379> JSON.MSET k1 . '{"name": "John","address": {"street": "123 Main St","city": "Springfield"},"phones": ["555-1234","555-5678"]}'
OK
127.0.0.1:6379> JSON.MSET k1 .address.street '"21 2nd Street"' k1 .address.city '"New York"'
OK
127.0.0.1:6379> JSON.GET k1 .address.street
"\"21 2nd Street\""
127.0.0.1:6379> JSON.GET k1 .address.city
"\"New York\""

RESP2/RESP3 回复