JSON.ARRINDEX
语法
JSON.ARRINDEX key path value [start [stop]]
- 可用版本
- Redis 堆栈 / JSON 1.0.0
- 时间复杂度
- 当路径解析为单个值时为 O(N),其中 N 为数组的大小;当路径解析为多个值时为 O(N),其中 N 为键的大小。
在数组中搜索 JSON 值的第一个出现位置
必需参数
key
是要解析的键。
path
是要指定的 JSONPath。
value
是要在数组中查找其索引的值。
可选参数
start
是要指定的数组切片中要搜索的包含起始值。默认值为 0
。
stop
是要指定的数组切片中要搜索的排除结束值,包括最后一个元素。默认值为 0
。负值被解释为从末尾开始。
关于超出范围的索引
超出范围的索引会舍入到数组的开头和结尾。反向索引范围(如从 1 到 0 的范围)将返回未找到或 -1
。返回值
JSON.ARRINDEX
返回一个 数组,其中包含每个路径的整数回复,即与路径匹配的每个 JSON 值在数组中的第一个位置,如果在数组中未找到,则返回 -1
,或者如果匹配的 JSON 值不是数组,则返回 nil
。有关回复的更多信息,请参见 Redis 序列化协议规范。
示例
查找产品颜色列表中特定颜色的位置
为黑色和银色降噪耳机创建一个文档。
redis> JSON.SET item:1 $ '{"name":"Noise-cancelling Bluetooth headphones","description":"Wireless Bluetooth headphones with noise-cancelling technology","connection":{"wireless":true,"type":"Bluetooth"},"price":99.98,"stock":25,"colors":["black","silver"]}'
OK
将颜色 blue
添加到 colors
数组的末尾。JSON.ARRAPEND
返回数组的新大小。
redis> JSON.ARRAPPEND item:1 $.colors '"blue"'
1) (integer) 3
返回 colors
数组的新长度。
redis> JSON.GET item:1
"{\"name\":\"Noise-cancelling Bluetooth headphones\",\"description\":\"Wireless Bluetooth headphones with noise-cancelling technology\",\"connection\":{\"wireless\":true,\"type\":\"Bluetooth\"},\"price\":99.98,\"stock\":25,\"colors\":[\"black\",\"silver\",\"blue\"]}"
获取产品的颜色列表。
redis> JSON.GET item:1 '$.colors[*]'
"[\"black\",\"silver\",\"blue\"]"
在第二种颜色之后再插入两种颜色。你现在有五种颜色。
redis> JSON.ARRINSERT item:1 $.colors 2 '"yellow"' '"gold"'
1) (integer) 5
获取更新后的颜色列表。
redis> JSON.GET item:1 $.colors
"[[\"black\",\"silver\",\"yellow\",\"gold\",\"blue\"]]"
查找颜色 silver
所在的位置。
redis> JSON.ARRINDEX item:1 $..colors '"silver"'
1) (integer) 1
另请参见
JSON.ARRAPPEND
| JSON.ARRINSERT