MongoDB 条件操作符
MongoDB 提供了一系列的条件操作符,用于筛选数据并执行不同的查询。主要的条件操作符如下:
1. 比较操作符
| 操作符 | 作用 |
|---|---|
$eq | 等于(equal) |
$ne | 不等于(not equal) |
$gt | 大于(greater than) |
$gte | 大于等于(greater than or equal) |
$lt | 小于(less than) |
$lte | 小于等于(less than or equal) |
示例
查询 price 等于 100 的商品
db.products.find({ price: { $eq: 100 } })
查询 price 不等于 100 的商品
db.products.find({ price: { $ne: 100 } })
查询 price 大于 50 的商品
db.products.find({ price: { $gt: 50 } })
查询 price 小于等于 200 的商品
db.products.find({ price: { $lte: 200 } })
2. 逻辑操作符
| 操作符 | 作用 |
|---|---|
$and | 逻辑 AND(多个条件都满足) |
$or | 逻辑 OR(任意一个条件满足) |
$not | 逻辑 NOT(取反) |
$nor | 逻辑 NOR(所有条件都不满足) |
示例
查询 price 大于 50 且 category 为 “electronics”
db.products.find({
$and: [
{ price: { $gt: 50 } },
{ category: "electronics" }
]
})
查询 price 小于 50 或 category 为 “books”
db.products.find({
$or: [
{ price: { $lt: 50 } },
{ category: "books" }
]
})
查询 price 不是 100
db.products.find({ price: { $not: { $eq: 100 } } })
查询 price 既不小于 50 也不大于 200
db.products.find({
$nor: [
{ price: { $lt: 50 } },
{ price: { $gt: 200 } }
]
})
3. 元素操作符
| 操作符 | 作用 |
|---|---|
$exists | 字段是否存在 |
$type | 字段的数据类型 |
示例
查询 discount 字段存在的商品
db.products.find({ discount: { $exists: true } })
查询 price 字段类型是 double
db.products.find({ price: { $type: "double" } })
4. 数组操作符
| 操作符 | 作用 |
|---|---|
$all | 数组字段必须包含指定所有值 |
$size | 数组字段的长度 |
$elemMatch | 数组字段中至少有一个元素满足多个条件 |
示例
查询 tags 数组包含 "electronics" 和 "sale"
db.products.find({ tags: { $all: ["electronics", "sale"] } })
查询 tags 数组长度为 3
db.products.find({ tags: { $size: 3 } })
查询 reviews 数组中至少有一个评分大于 4 并且 user 不是 "guest"
db.products.find({
reviews: {
$elemMatch: { rating: { $gt: 4 }, user: { $ne: "guest" } }
}
})
5. 正则表达式操作符
| 操作符 | 作用 |
|---|---|
$regex | 正则表达式匹配 |
$options | 配合 $regex 进行匹配修饰符,如 i(忽略大小写) |
示例
查询 name 包含 "phone"
db.products.find({ name: { $regex: "phone" } })
查询 name 以 "Samsung" 开头(不区分大小写)
db.products.find({ name: { $regex: "^Samsung", $options: "i" } })
6. 模式匹配操作符
| 操作符 | 作用 |
|---|---|
$expr | 允许在查询中使用聚合表达式 |
$mod | 按模运算 |
示例
查询 price 是 5 的倍数
db.products.find({ price: { $mod: [5, 0] } })
查询 stock 大于 min_stock(基于字段值的计算)
db.inventory.find({
$expr: { $gt: ["$stock", "$min_stock"] }
})
7. 比特操作符
| 操作符 | 作用 |
|---|---|
$bitsAllSet | 所有指定位必须为 1 |
$bitsAnySet | 任何指定位为 1 即匹配 |
$bitsAllClear | 所有指定位必须为 0 |
$bitsAnyClear | 任何指定位为 0 即匹配 |
示例
查询 flags 字段的二进制表示中,第 1 和 3 位必须为 1:
db.users.find({ flags: { $bitsAllSet: [0, 2] } })
总结
MongoDB 条件操作符提供强大的查询功能,涵盖了比较、逻辑、数组、元素、正则、模式匹配、比特运算等多种情况。灵活使用这些操作符可以大幅提升查询能力和数据筛选效率!
你可以结合多个操作符进行复杂查询,例如:
db.products.find({
$and: [
{ price: { $gt: 50, $lt: 500 } },
{ category: { $in: ["electronics", "home"] } }
]
})
这个查询表示:价格在 50 到 500 之间,并且 category 为 "electronics" 或 "home" 的商品。
更多详细内容请关注其他相关文章!