$not(取反)
最后更新:2026-10-09
$not(取反)
$not 对操作符表达式取反,返回不满足内部条件的文档。`{ price: { $not: { $gt: 50 } } }` 匹配价格不大于 50 的文档。注意:$not 不能直接匹配字段缺失的文档(字段缺失时条件视为不满足);且内部必须是操作符表达式,不能是正则字面量。
| 分类 | 逻辑 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ <字段>: { $not: { <操作符表达式> } } }
⚙️ 参数
| 字段 | 要匹配的文档字段名。 |
|---|---|
| 操作符表达式 | 被取反的操作符条件,如 { $gt: 50 }。 |
返回值:匹配的文档游标
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $not:价格不大于 50
db.products.find({ price: { $not: { $gt: 50 } } })
// 等价写法:$lte 更直白
db.products.find({ price: { $lte: 50 } })
运行结果:
// 返回价格不大于 50 的商品;字段缺失的商品不会返回
📌 注意事项
- 字段缺失时 $not 不匹配:想包含缺失字段需配合 $exists
- 能用 $lte、$ne 表达的否定优先用原操作符,语义更清晰
- $not 内部只接受操作符表达式(如 $gt、$regex),不接受字面量
🏷️ 相关标签
💡 相关案例
📚 相关教程
❓ 常见问题
Q$not 和 $ne 有什么区别?
A$ne 是「不等于某个值」;$not 是对操作符表达式整体取反,如 { $not: { $gt: 50 } }。
Q$not 会匹配字段不存在的文档吗?
A不会。字段缺失时内部条件不成立,取反后仍不匹配。
Q$not 能对正则取反吗?
A可以写成 { $not: { $regex: '...' } },但不能直接写 { $not: /pattern/ }。