$nor(非或)
最后更新:2026-10-09
$nor(非或)
$nor 组合多个条件,所有条件都不满足的文档才返回。`{ $nor: [ { price: 1.99 }, { sale: true } ] }` 匹配既不是 1.99 元、也不在促销的商品。与 $or 相反。注意坑:字段缺失时条件视为不满足,因此 $nor 会意外返回大量字段缺失的文档。
| 分类 | 逻辑 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ $nor: [ { <条件1> }, { <条件2> }, ... ] }
⚙️ 参数
| 条件数组 | 多个查询条件文档,全部不满足才匹配。 |
|---|
返回值:匹配的文档游标
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $nor:价格不是 1.99 且不在促销
db.products.find({
$nor: [
{ price: 1.99 },
{ sale: true }
]
})
运行结果:
// 返回既不等于 1.99 也不在促销的商品;注意缺失 sale 字段的也会返回
📌 注意事项
- 字段缺失视为条件不满足,$nor 会把缺失字段的文档也返回(常见坑)
- 想排除缺失字段,可在每个条件上加 $exists: true
- $nor 与 $not 区别:$nor 作用于多条件,$not 作用于单字段操作符
🏷️ 相关标签
💡 相关案例
📚 相关教程
❓ 常见问题
Q$nor 和 $not 有什么区别?
A$nor 对多个查询条件取「全部不满足」;$not 对单个字段的操作符表达式取反。
Q$nor 为什么返回了字段缺失的文档?
A因为缺失字段不满足任何条件,而 $nor 要求所有条件都不满足,所以被包含。
Q$nor 能嵌套 $or 吗?
A能,$nor 数组里的每个元素都可以是复杂表达式。