*Redis JSON.ARRINDEX 命令
JSON.ARRINDEX 在 RedisJSON 中查找指定值在数组中的索引位置。
*语法
JSON.ARRINDEX key path value [start [stop]]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | JSON 文档键名 |
| path | String | 是 | JSONPath 路径 |
| value | String | 是 | 要查找的 JSON 值 |
| start | Integer | 否 | 起始索引(含),默认 0 |
| stop | Integer | 否 | 结束索引(含),默认数组末尾 |
*返回值
- Integer:值在数组中的索引,-1 表示未找到
- Error:路径不存在或目标不是数组
*时间复杂度
O(N),N 为数组长度
*示例
*基本用法
> JSON.SET doc $ '{"arr": [1, 2, 3, 4, 5]}'
OK
> JSON.ARRINDEX doc $.arr 3
(integer) 2
> JSON.ARRINDEX doc $.arr 10
(integer) -1
*指定范围
> JSON.ARRINDEX doc $.arr 3 1 3
(integer) 2
> JSON.ARRINDEX doc $.arr 3 3 4
(integer) -1
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR path does not exist | 路径不存在 | 确认路径正确 |
| ERR path not an array | 目标不是数组 | 确认路径指向数组 |
*最佳实践
- 使用范围缩小搜索范围
- 对于复杂对象,确保 value 完全匹配
- 返回 -1 时确认值确实不存在
*FAQ
Q1: 支持部分匹配吗? A: 不支持,需要完全匹配。
Q2: 数组中有多个相同值会返回哪个? A: 返回第一个匹配的索引。
Q3: 支持负索引吗? A: 不支持,start 和 stop 必须是正整数。