MongoDB 条件操作符
描述
条件操作符用于比较两个表达式并从 mongoDB 集合中获取数据。
在本章节中,我们将讨论如何在 MongoDB 中使用条件操作符。
这些操作符可以分为以下几类:比较操作符、逻辑操作符、元素操作符、数组操作符、以及其他常用操作符。
比较操作符
比较操作符有:
操作符 | 描述 | 示例 |
---|---|---|
$eq | 等于 | { age: { $eq: 25 } } |
$ne | 不等于 | { age: { $ne: 25 } } |
$gt | 大于 | { age: { $gt: 25 } } |
$gte | 大于等于 | { age: { $gte: 25 } } |
$lt | 小于 | { age: { $lt: 25 } } |
$lte | 小于等于 | { age: { $lte: 25 } } |
$in | 在指定的数组中 | { age: { $in: [25, 30, 35] } } |
$nin | 不在指定的数组中 | { age: { $nin: [25, 30, 35] } } |
查找年龄大于 25 且城市为 "New York" 的文档:
db.myCollection.find({ age: { $gt: 25 }, city: "New York" });
逻辑操作符
逻辑操作符有:
操作符 | 描述 | 示例 |
---|---|---|
$and | 逻辑与,符合所有条件 | { $and: [ { age: { $gt: 25 } }, { city: "New York" } ] } |
$or | 逻辑或,符合任意条件 | { $or: [ { age: { $lt: 25 } }, { city: "New York" } ] } |
$not | 取反,不符合条件 | { age: { $not: { $gt: 25 } } } |
$nor | 逻辑与非,均不符合条件 | { $nor: [ { age: { $gt: 25 } }, { city: "New York" } ] } |
查找年龄大于 25 或城市为 "New York" 的文档:
db.myCollection.find({ $or: [ { age: { $gt: 25 } }, { city: "New York" } ] });
元素操作符
元素操作符有:
操作符 | 描述 | 示例 |
---|---|---|
$exists | 字段是否存在 | { age: { $exists: true } } |
$type | 字段的 BSON 类型 | { age: { $type: "int" } } |
查找包含 age 字段的文档:
db.myCollection.find({ age: { $exists: true } });
数组操作符
数组操作符有:
操作符 | 描述 | 示例 |
---|---|---|
$all | 数组包含所有指定的元素 | { tags: { $all: ["red", "blue"] } } |
$elemMatch | 数组中的元素匹配指定条件 | { results: { $elemMatch: { score: { $gt: 80, $lt: 85 } } } } |
$size | 数组的长度等于指定值 | { tags: { $size: 3 } } |
查找数组 tags 中包含 "red" 和 "blue" 的文档:
db.myCollection.find({ tags: { $all: ["red", "blue"] } });
其他操作符
还有一些其他操作符如下:
操作符 | 描述 | 示例 |
---|---|---|
$regex | 匹配正则表达式 | { name: { $regex: /^A/ } } |
$text | 进行文本搜索 | { $text: { $search: "coffee" } } |
$where | 使用 JavaScript 表达式进行条件过滤 | { $where: "this.age > 25" } |
查找名字以 "A" 开头的文档:
db.myCollection.find({ name: { $regex: /^A/ } });
实例
查找年龄大于 25 且城市为 "New York",名字以 "A" 开头的文档:
实例
db.myCollection.find({
$and: [
{ age: { $gt: 25 } },
{ city: "New York" },
{ name: { $regex: /^A/ } }
]
});
$and: [
{ age: { $gt: 25 } },
{ city: "New York" },
{ name: { $regex: /^A/ } }
]
});
Mrt.L
903***165@qq.com
一些简写说明:
Mrt.L
903***165@qq.com
最初的梦想
660***09@qq.com
模糊查询
查询 title 包含"教"字的文档:
查询 title 字段以"教"字开头的文档:
查询 titl e字段以"教"字结尾的文档:
最初的梦想
660***09@qq.com
IT_小白鼠
262***7432@qq.com
mongoDb3.2 以上版本新增了位运算进行计算;将数字转换成二进制后,按位进行位运算:
$bitsAllClear 所有指定为都为 0。
db.user.find({"bitData":{$bitsAllClear:[1,4]}}) 将二进制的第 2 位以及第 5 位上为 0 的匹配出来。
$bitsAllSet 所有指定的都为 1。
db.user.find({"bitData":{$bitsAllSet:[1,4]}}) 将二进制的第 2 位以及第 5 位上为 1 的匹配出来。
$bitsAnyClear 任意一位都为 0 的匹配出来与 $bitsAllClear 一致。
$bitsAnySet 任意一位都为 1 的匹配出来与 $bitsAllSet 一致。
还有一种就是直接通过数字进行位运算 即位语言运算符中的 & 一致。
db.user.find({"bitData":{$bitsAllClear:8}}) 即 bitData 这个列与 8 数字进行 & 位运算结果为 0 的显示出来。
db.user.find({"bitData":{$bitsAllSet:8}}) 即 bitData 这个列与 8 数字进行 & 位运算结果不为 0 的显示出来。
通过数字进行计算的话:
IT_小白鼠
262***7432@qq.com