JSON.ARRTRIM

语法
JSON.ARRTRIM key path start stop
可用版本
Redis 开源版 / JSON 1.0.0
时间复杂度
当路径评估为单个值时,时间复杂度为 O(N),其中 N 是数组的大小;当路径评估为多个值时,时间复杂度为 O(N),其中 N 是键的大小
ACL 类别
@json, @write, @slow,

修剪数组,使其仅包含指定范围(包括边界)内的元素

示例

必需参数

key

是要修改的 key。

可选参数

path

是要指定的 JSONPath。默认为根路径 $

start

是要保留的第一个元素的索引(之前的元素将被修剪)。默认为 0。

stop

是要保留的最后一个元素的索引(之后的元素将被修剪),包括最后一个元素。默认为 0。负值表示从末尾开始计算。

关于超出范围的索引

JSON.ARRTRIM 非常宽容,使用超出范围的索引不会产生错误。请注意 RedisJSON v2.0 与旧版本处理超出范围索引的方式的一些区别。

RedisJSON v2.0 的行为

  • 如果 start 大于数组大小或 start > stop,则返回 0 和一个空数组。
  • 如果 start < 0,则从数组末尾开始计算。
  • 如果 stop 大于数组末尾,则将其视为最后一个元素。

返回值

JSON.ARRTRIM 返回一个整数回复数组,每个路径对应一个回复,表示数组的新大小;如果匹配的 JSON 值不是数组,则返回 nil。有关回复的更多信息,请参阅Redis 序列化协议规范

示例

将数组修剪到特定值范围

创建两个带有最大音量级别的耳机产品。

redis> JSON.SET key $
"[{\"name\":\"Healthy headphones\",\"description\":\"Wireless Bluetooth headphones with noise-cancelling technology\",\"connection\":{\"wireless\":true,\"type\":\"Bluetooth\"},\"price\":99.98,\"stock\":25,\"colors\":[\"black\",\"silver\"],\"max_level\":[60,70,80]},{\"name\":\"Noisy headphones\",\"description\":\"Wireless Bluetooth headphones with noise-cancelling technology\",\"connection\":{\"wireless\":true,\"type\":\"Bluetooth\"},\"price\":99.98,\"stock\":25,\"colors\":[\"black\",\"silver\"],\"max_level\":[85,90,100,120]}]"
OK

向第二个产品添加新的音量级别值。

redis> JSON.ARRAPPEND key $.[1].max_level 140 160 180 200 220 240 260 280
1) (integer) 12

获取更新后的数组。

redis> JSON.GET key $.[1].max_level
"[[85,90,100,120,140,160,180,200,220,240,260,280]]"

仅保留第五个到第九个元素之间的值,包括第九个元素。

redis> JSON.ARRTRIM key $.[1].max_level 4 8
1) (integer) 5

获取更新后的数组。

redis> JSON.GET key $.[1].max_level
"[[140,160,180,200,220]]"

另请参阅

JSON.ARRINDEX | JSON.ARRINSERT


评价此页
回到顶部 ↑