MongoDB的条件查询使用
find()
方法,通过指定查询条件来筛选文档。可以使用各种比较运算符和逻辑运算符构建复杂的查询条件。查询年龄大于20的用户文档,可以使用{ "age": { "$gt": 20 } }
作为查询条件。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": [20, 25, 30] } } |
$nin | 不在给定数组中 | { "age": { "$nin": [20, 25, 30] } } |
逻辑操作符
操作符 | 描述 | 示例 |
$and | 逻辑与 | { "$and": [{ "age": { "$gte": 25 } }, { "gender": "male" }] } |
$or | 逻辑或 | { "$or": [{ "age": { "$gte": 25 } }, { "gender": "male" }] } |
$not | 逻辑非 | { "age": { "$not": { "$gte": 25 } } } |
数组操作符
操作符 | 描述 | 示例 |
$all | 匹配数组中所有元素 | { "tags": { "$all": ["java", "mongodb"] } } |
$elemMatch | 匹配数组中的某个元素 | { "scores": { "$elemMatch": { "score": { "$gt": 80 }, "subject": "math" } } } |
$size | 匹配数组长度 | { "tags": { "$size": 3 } } |
字符串操作符
操作符 | 描述 | 示例 |
$regex | 正则表达式匹配 | { "name": { "$regex": "^A.*" } } |
$options | 指定正则表达式选项 | { "name": { "$regex": "^A.*", "$options": "i" } } |
$text | 文本搜索 | { "$text": { "$search": "MongoDB" } } |
类型操作符
操作符 | 描述 | 示例 |
$type | 匹配特定类型的值 | { "age": { "$type": "number" } } |
示例查询
假设我们有一个名为users
的集合,其中包含以下文档:
(图片来源网络,侵删)
[ { "_id": 1, "name": "Alice", "age": 25, "gender": "female", "tags": ["java", "mongodb"] }, { "_id": 2, "name": "Bob", "age": 30, "gender": "male", "tags": ["python", "mongodb"] }, { "_id": 3, "name": "Charlie", "age": 20, "gender": "male", "tags": ["javascript", "nodejs"] } ]
我们可以使用上述操作符进行各种条件查询:
查询年龄等于25的用户:
db.users.find({ "age": { "$eq": 25 } });
查询年龄大于25且性别为男性的用户:
db.users.find({ "$and": [{ "age": { "$gt": 25 } }, { "gender": "male" }] });
查询名字以字母"A"开头的用户:
db.users.find({ "name": { "$regex": "^A.*" } });
查询至少有一个标签是 "mongodb" 的用户:
db.users.find({ "tags": { "$in": ["mongodb"] } });
(图片来源网络,侵删)
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/871437.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复