$or(或)
最后更新:2026-10-09
$or(或)
$or 组合多个查询条件,满足任意一个即返回该文档。`{ $or: [ { price: { $lt: 5 } }, { sale: true } ] }`。MongoDB 会对 $or 的每个子句尝试走索引,多个索引取并集。单个字段的多个取值场景用 $in 更高效,$or 适合不同字段间的「任一满足」逻辑。
| 分类 | 逻辑 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ $or: [ { <条件1> }, { <条件2> }, ... ] }
⚙️ 参数
| 条件数组 | 多个查询条件文档,满足任意一个即匹配。 |
|---|
返回值:匹配的文档游标
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $or:价格低于 5 或正在促销
db.products.find({
$or: [
{ price: { $lt: 5 } },
{ sale: true }
]
})
运行结果:
// 返回满足任一条件的商品(两个条件都满足也只返回一次)
📌 注意事项
- 单字段多值用 $in 替代 $or,性能更好、写法更简
- $or 可与其他逻辑操作符嵌套,与 $and 组合时注意结构
- 每个子句若可走索引则索引合并,全表扫描兜底
🏷️ 相关标签
💡 相关案例
📚 相关教程
❓ 常见问题
Q$or 和 $in 什么区别?
A$in 只能针对同一字段的多个值;$or 可组合不同字段的不同条件。同字段多值用 $in。
Q$or 会重复返回满足多个条件的文档吗?
A不会。一个文档最多返回一次,满足多个条件也只算一条结果。
Q$or 能嵌套 $and 吗?
A能,$or 数组中的每个条件都可以是 $and、$nor 等复杂表达式。