$indexOfArray(查找元素在数组中的索引)
最后更新:2026-10-09
$indexOfArray(查找元素在数组中的索引)
$indexOfArray 在数组中查找指定值第一次出现的位置并返回索引,找不到时返回 -1。典型场景包括判断某标签是否存在、定位特定元素以便与 $arrayElemAt 组合取值。可选参数可以限定搜索的起始和结束索引区间。它是数组版的 $indexOfBytes/$indexOfCP,后两者用于字符串。查找采用严格相等比较,对象需要整体匹配。
| 分类 | 数组 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ $indexOfArray: [ <数组>, <查找值>, <起始索引>, <结束索引> ] }
⚙️ 参数
| 数组 | 要搜索的数组。 |
|---|---|
| 查找值 | 要查找的元素。 |
| 起始索引 | 可选,搜索起始位置(含),默认 0。 |
| 结束索引 | 可选,搜索结束位置(不含)。 |
返回值:第一个匹配元素的索引;找不到返回 -1
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $indexOfArray:找到 'urgent' 标签的位置
db.tasks.aggregate([
{ $project: {
urgentPos: { $indexOfArray: ['$tags', 'urgent'] }
} }
])
运行结果:
{ '_id': 1, 'urgentPos': 2 }
{ '_id': 2, 'urgentPos': -1 }
📌 注意事项
- 只返回第一个匹配的索引,后续重复元素不返回
- 区间为左闭右开:起始索引含、结束索引不含
- 找不到返回 -1,可据此做存在性判断
🏷️ 相关标签
💡 相关案例
更多实战案例即将上线,敬请期待。
📚 相关教程
❓ 常见问题
Q$indexOfArray 找不到元素返回什么?
A返回 -1,可用 $ne 判断是否等于 -1 来做存在性检查。
Q能限定搜索范围吗?
A能,第三、四个参数分别是起始索引(含)和结束索引(不含)。
Q查找对象元素要怎么写?
A直接传完整对象做严格相等比较,如 { $indexOfArray: ['$arr', { a: 1 }] }。