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