简介
在 MongoDB 中,查询运算符用于指定查询条件,以从集合中检索特定的数据。查询运算符通常与查询文档一起使用,这些查询文档作为 find()
或 findOne()
方法的参数传递。
基本查询运算符
$eq
$eq
运算符用于匹配等于某个值的字段。这是最常用的查询运算符之一。
db.collection.find({ field: { $eq: value } })
示例:
db.users.find({ age: { $eq: 30 } })
上述代码将返回所有年龄为 30 的用户记录。
$ne
$ne
运算符用于匹配不等于某个值的字段。
db.collection.find({ field: { $ne: value } })
示例:
db.users.find({ age: { $ne: 30 } })
上述代码将返回所有年龄不是 30 的用户记录。
$lt
$lt
运算符用于匹配小于某个值的字段。
db.collection.find({ field: { $lt: value } })
示例:
db.users.find({ age: { $lt: 30 } })
上述代码将返回所有年龄小于 30 的用户记录。
$lte
$lte
运算符用于匹配小于或等于某个值的字段。
db.collection.find({ field: { $lte: value } })
示例:
db.users.find({ age: { $lte: 30 } })
上述代码将返回所有年龄小于或等于 30 的用户记录。
$gt
$gt
运算符用于匹配大于某个值的字段。
db.collection.find({ field: { $gt: value } })
示例:
db.users.find({ age: { $gt: 30 } })
上述代码将返回所有年龄大于 30 的用户记录。
$gte
$gte
运算符用于匹配大于或等于某个值的字段。
db.collection.find({ field: { $gte: value } })
示例:
db.users.find({ age: { $gte: 30 } })
上述代码将返回所有年龄大于或等于 30 的用户记录。
范围查询运算符
$in
$in
运算符用于匹配字段值在指定范围内的文档。
db.collection.find({ field: { $in: [value1, value2, ...] } })
示例:
db.users.find({ age: { $in: [25, 30, 35] } })
上述代码将返回所有年龄为 25、30 或 35 的用户记录。
$nin
$nin
运算符用于匹配字段值不在指定范围内的文档。
db.collection.find({ field: { $nin: [value1, value2, ...] } })
示例:
db.users.find({ age: { $nin: [25, 30, 35] } })
上述代码将返回所有年龄不是 25、30 或 35 的用户记录。
模糊查询运算符
$regex
$regex
运算符用于进行正则表达式匹配。
db.collection.find({ field: { $regex: /pattern/ } })
示例:
db.users.find({ name: { $regex: /^John/ } })
上述代码将返回所有名字以 "John" 开头的用户记录。
$options
$options
运算符可以与 $regex
一起使用,以指定正则表达式的选项。
db.collection.find({ field: { $regex: /pattern/, $options: 'i' } })
示例:
db.users.find({ name: { $regex: /^john/i } })
上述代码将返回所有名字以 "john" 开头(忽略大小写)的用户记录。
数组查询运算符
$all
$all
运算符用于匹配包含所有指定元素的数组字段。
db.collection.find({ field: { $all: [value1, value2, ...] } })
示例:
db.users.find({ tags: { $all: ["student", "young"] } })
上述代码将返回所有标签包含 "student" 和 "young" 的用户记录。
$elemMatch
$elemMatch
运算符用于匹配数组中的元素,该元素满足所有指定的条件。
db.collection.find({ field: { $elemMatch: { condition1: value1, condition2: value2, ... } } })
示例:
db.users.find({ tags: { $elemMatch: { $eq: "student", $lt: 30 } } })
上述代码将返回所有标签包含 "student" 并且年龄小于 30 的用户记录。
$size
$size
运算符用于匹配具有指定长度的数组字段。
db.collection.find({ field: { $size: length } })
示例:
db.users.find({ tags: { $size: 3 } })
上述代码将返回所有标签数量为 3 的用户记录。
复杂查询运算符
$and
$and
运算符用于组合多个查询条件,并且所有条件都必须满足。
db.collection.find({ $and: [condition1, condition2, ...] })
示例:
db.users.find({ $and: [{ age: { $lt: 30 } }, { age: { $gt: 20 } }] })
上述代码将返回所有年龄在 20 到 30 之间的用户记录。
$or
$or
运算符用于组合多个查询条件,并且只要满足其中一个条件即可。
db.collection.find({ $or: [condition1, condition2, ...] })
示例:
db.users.find({ $or: [{ age: { $lt: 30 } }, { age: { $gt: 40 } }] })
上述代码将返回所有年龄小于 30 或者大于 40 的用户记录。
$not
$not
运算符用于否定一个查询条件。
db.collection.find({ field: { $not: condition } })
示例:
db.users.find({ age: { $not: { $lt: 30 } } })
上述代码将返回所有年龄不小于 30 的用户记录。
$nor
$nor
运算符用于组合多个查询条件,并且所有条件都不能满足。
db.collection.find({ $nor: [condition1, condition2, ...] })
示例:
db.users.find({ $nor: [{ age: { $lt: 30 } }, { age: { $gt: 40 } }] })
上述代码将返回所有年龄不在 20 到 30 之间并且年龄也不大于 40 的用户记录。
存在性查询运算符
$exists
$exists
运算符用于检查字段是否存在。
db.collection.find({ field: { $exists: true } })
示例:
db.users.find({ name: { $exists: true } })
上述代码将返回所有具有 "name" 字段的用户记录。
$type
$type
运算符用于检查字段的类型。
db.collection.find({ field: { $type: type } })
示例:
db.users.find({ age: { $type: "int" } })
上述代码将返回所有 "age" 字段为整型的用户记录。
聚合框架中的查询运算符
$match
$match
运算符用于过滤聚合管道中的数据。
{ $match: { field: condition } }
示例:
{ $match: { age: { $lt: 30 } } }
上述代码将过滤出年龄小于 30 的用户记录。
$project
$project
运算符用于选择和修改输出文档的结构。
{ $project: { field: condition } }
示例:
{ $project: { name: 1, age: 1, _id: 0 } }
上述代码将只输出 "name" 和 "age" 字段,并且不输出 "_id" 字段。
$group
$group
运算符用于对数据进行分组和汇总。
{ $group: { _id: condition, field: { $operator: expression } } }
示例:
{ $group: { _id: "$age", count: { $sum: 1 } } }
上述代码将按年龄分组并统计每个年龄段的用户数量。
$sort
$sort
运算符用于对结果进行排序。
{ $sort: { field: order } }
示例:
{ $sort: { age: -1 } }
上述代码将按年龄降序排列结果。
以上是 MongoDB 查询运算符的详细介绍。通过灵活运用这些运算符,你可以构建复杂且高效的查询来满足各种需求。