$in(在数组中)
最后更新:2026-10-09
$in(在数组中)
$in 选择字段值等于指定数组中任意一个值的文档,是 $or 的便捷简写。`{ age: { $in: [18, 21, 30] } }` 匹配 age 为 18、21 或 30 的文档。它比多个 $eq 或 $or 更高效(走索引),且对数组字段有特殊语义(元素匹配)。
| 分类 | 比较 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ <字段>: { $in: [ <值1>, <值2>, ... ] } }
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $in:匹配 age 为 18、21 或 30
db.users.find({ age: { $in: [18, 21, 30] } })
运行结果:
// 返回 age 为上述任一值的文档
📌 注意事项
- 空数组 $in: [] 不匹配任何文档
- 对数组字段:任一元素命中即匹配(类似 $elemMatch)
- 正则表达式可作为 $in 的元素(但 $nin 不支持正则)
🏷️ 相关标签
💡 相关案例
📚 相关教程
❓ 常见问题
Q$in 和 $or 哪个快?
A$in 更快。单字段多值时 $in 只需一次索引查找,而 $or 需要多次索引分支合并,且 $in 支持正则。
Q$in 和 $or 的多个 $eq 等价吗?
A功能等价,但 $in 更简洁且性能更好(一次索引范围扫描)。此外 $in 还可以配合 $type 或正则表达式匹配多种形态。
Q$in 对数组字段如何工作?
A只要数组中有任意元素等于 $in 列表中的任一值即匹配。这与 $elemMatch 配合 $in 的效果相同,但写法更简洁。