首页 / MongoDB 入门教程 / 逻辑运算符

MongoDB 入门教程

逻辑运算符

本教程共 50 篇 · 第 15 篇 · 更新于 2026-07-30 · 约 7 分钟阅读

MongoDBMongoDB 入门教程逻辑运算符$or$and$not

15. 逻辑运算符

本节目标:用 $or、$and、$not、$nor 把多个条件组合起来,表达「任一」「全部」「取反」「全否」的逻辑。

15.1 沿用示例数据

本章继续用第 13 章的 users 集合(5 条北京/上海/广州用户)。若已清空,回去重跑那段插入。

15.2 $or:满足任一即可

$or 接收一个条件数组,只要有一个成立就匹配:

// city 是北京,或 age 大于 40
db.users.find({
  $or: [
    { city: "北京" },
    { age: { $gt: 40 } }
  ]
}).pretty()
Tip

$or 的多个条件之间默认就是「或」的关系。注意它的值是数组 [ ... ],新手常漏掉中括号。

15.3 $and:必须全部满足

多数时候「且」是隐式的——把条件并排写就自动是 AND:

// 隐式 AND:age>=25 且 age<35
db.users.find({ age: { $gte: 25, $lt: 35 } }).pretty()

需要显式 $and 时(比如同一字段要套两种运算,或配合 $not):

// 显式 AND
db.users.find({
  $and: [
    { age: { $gte: 25 } },
    { age: { $lt: 35 } }
  ]
}).pretty()

15.4 $not:对单个条件取反

$not 把紧跟它的那个条件取反,常和运算符搭配:

// age 不小于 30(即 age < 30 的反面)
db.users.find({
  age: { $not: { $lt: 30 } }
}).pretty()
Warning

$not 只作用于「一个条件」。要否定多个条件,用 $nor 而不是把 $not 叠一堆。

15.5 $nor:全都不满足

$nor 是「以上条件一个都不成立」才匹配:

// 既不是北京,也不是上海
db.users.find({
  $nor: [
    { city: "北京" },
    { city: "上海" }
  ]
}).pretty()

对这份数据,结果只剩广州的王芳。

15.6 组合使用示例

逻辑运算符可以嵌套。比如「(北京 或 上海) 且 年龄大于 30」:

db.users.find({
  $and: [
    { $or: [ { city: "北京" }, { city: "上海" } ] },
    { age: { $gt: 30 } }
  ]
}).pretty()
Note

据 MongoDB 8.3 官方文档,这些逻辑运算符都接受表达式数组;$nor 在「排除一组成立条件」时比叠加多个 $ne 更直观。

15.7 小结

  • 多条件「且」:默认并排写,或显式 $and
  • 多条件「或」:用 $or,值是数组。
  • 单条件取反:$not
  • 全都不要:$nor