Skip to content

MongoDB 条件操作符

MongoDB 提供了丰富的条件操作符,用于在查询文档时指定复杂的查询条件。这些操作符允许我们执行比简单的相等匹配更高级的查询操作。

比较操作符

1. 大于操作符 ($gt)

javascript
// 查询 age 字段大于 30 的文档
db.users.find({ age: { $gt: 30 } })

2. 大于或等于操作符 ($gte)

javascript
// 查询 age 字段大于或等于 30 的文档
db.users.find({ age: { $gte: 30 } })

3. 小于操作符 ($lt)

javascript
// 查询 age 字段小于 30 的文档
db.users.find({ age: { $lt: 30 } })

4. 小于或等于操作符 ($lte)

javascript
// 查询 age 字段小于或等于 30 的文档
db.users.find({ age: { $lte: 30 } })

5. 不等于操作符 ($ne)

javascript
// 查询 status 字段不等于 "inactive" 的文档
db.users.find({ status: { $ne: "inactive" } })

逻辑操作符

1. AND 操作符 ($and)

javascript
// 查询 age 大于 30 且 status 等于 "active" 的文档
db.users.find({
  $and: [
    { age: { $gt: 30 } },
    { status: "active" }
  ]
})

2. OR 操作符 ($or)

javascript
// 查询 age 大于 30 或 status 等于 "active" 的文档
db.users.find({
  $or: [
    { age: { $gt: 30 } },
    { status: "active" }
  ]
})

3. NOR 操作符 ($nor)

javascript
// 查询 age 不大于 30 且 status 不等于 "active" 的文档
db.users.find({
  $nor: [
    { age: { $gt: 30 } },
    { status: "active" }
  ]
})

数组操作符

1. 包含操作符 ($in)

javascript
// 查询 status 字段包含在 ["active", "pending"] 数组中的文档
db.users.find({ status: { $in: ["active", "pending"] } })

2. 不包含操作符 ($nin)

javascript
// 查询 status 字段不包含在 ["inactive", "deleted"] 数组中的文档
db.users.find({ status: { $nin: ["inactive", "deleted"] } })

3. 数组长度操作符 ($size)

javascript
// 查询 tags 数组长度为 3 的文档
db.users.find({ tags: { $size: 3 } })

元素操作符

1. 存在操作符 ($exists)

javascript
// 查询包含 email 字段的文档
db.users.find({ email: { $exists: true } })

2. 类型操作符 ($type)

javascript
// 查询 age 字段类型为 Number 的文档
db.users.find({ age: { $type: "number" } })

正则表达式操作符

javascript
// 查询 name 字段以 "J" 开头的文档
db.users.find({ name: { $regex: /^J/ } })

// 查询 name 字段包含 "john" 的文档(不区分大小写)
db.users.find({ name: { $regex: /john/i } })

其他常用操作符

1. 条件操作符 ($where)

javascript
// 使用 JavaScript 表达式查询
db.users.find({
  $where: function() {
    return this.age > 30 && this.status === "active";
  }
})

2. 评估操作符 ($expr)

javascript
// 使用聚合表达式查询
db.users.find({
  $expr: {
    $gt: ["$age", "$minAge"]
  }
})

操作符优先级

MongoDB 查询操作符具有不同的优先级,以下是一些常见操作符的优先级顺序(从高到低):

  1. $expr, $jsonSchema, $mod, $regex, $text, $where
  2. $geoIntersects, $geoWithin, $near, $nearSphere
  3. $all, $elemMatch, $eq, $gt, $gte, $in, $lt, $lte, $ne, $nin, $not
  4. $and
  5. $or, $nor

总结

MongoDB 提供了丰富的查询操作符,允许我们创建复杂的查询条件。了解这些操作符的使用方法对于高效地查询和分析数据至关重要。在实际开发中,我们可以根据需要组合使用这些操作符,以满足各种查询需求。