本节列举一些常用的操作符,更多操作符请参考:https://www.mongodb.com/docs/manual/reference/operator/
查询操作符
比较查询操作符
操作符 | 说明 |
---|---|
$eq | 等于 |
$gt | 大于 |
$gte | 大于等于 |
$lt | 小于 |
$lte | 小于等于 |
$ne | 不等于 |
$in | 包含 |
$nin | 不包含 |
逻辑查询操作符
操作符 | 说明 |
---|---|
$and | 与 |
$or | 或 |
$not | 非 |
$nor | 非或 |
元素查询操作符
操作符 | 说明 |
---|---|
$exists | 匹配具有指定字段的文档。 |
$type | 如果字段是指定类型,则选择文档。 |
评估查询操作符
操作符 | 说明 |
---|---|
$mod | 模 |
$regex | 正则表达式 |
$text | 文本 |
$where | 匹配满足 JavaScript 表达式的文档。 |
数组查询操作符
操作符 | 说明 |
---|---|
$all | 匹配包含查询中指定的所有元素的数组。 |
$elemMatch | 如果 array 字段中的元素符合所有指定 $elemMatch 条件,则选择文档。 |
$size | 如果数组字段为指定大小,则选择文档。 |
地理空间查询操作符
操作符 | 说明 |
---|---|
$geoIntersects | 如果 GeoJSON 几何体与字段的几何体相交,则选择文档。 |
$geoWithin | 如果 GeoJSON 几何体完全包含在字段的几何体内,则选择文档。 |
$near | 返回与指定地理空间点最接近的文档。 |
$nearSphere | 返回与指定地理空间点最接近的文档。 |
更新操作符
字段更新操作符
操作符 | 说明 |
---|---|
$currentDate | 将字段更新为当前日期,时间或时间戳。 |
$inc | 增加字段的值。 |
$min | 仅当指定的值小于当前字段值时,才更新字段。 |
$max | 仅当指定的值大于当前字段值时,才更新字段。 |
$mul | 将字段的值乘以指定的值。 |
$rename | 重命名字段。 |
$set | 设置字段的值。 |
$setOnInsert | 如果插入文档,则设置字段的值。 |
$unset | 删除字段。 |
数组更新操作符
操作符 | 说明 |
---|---|
$addToSet | 将值添加到数组中,但不会创建副本。 |
$pop | 从数组中删除第一个或最后一个元素。 |
$pull | 从数组中删除所有匹配查询的元素。 |
$pullAll | 从数组中删除所有匹配指定值的元素。 |
$push | 将值添加到数组中。 |
有一些额外的修饰符可以与 $push
操作符一起使用。
修饰符 | 说明 |
---|---|
$each | 将多个值添加到数组中。 |
$position | 指定在数组中插入值的位置。 |
$slice | 限制数组的大小。 |
$sort | 按指定顺序排序数组。 |
聚合管道操作符
这部分,需要先了解两个概念:聚合管道阶段和聚合管道操作符。
聚合管道阶段是指在 MongoDB
中,聚合操作被划分为不同的步骤或阶段,每个阶段都会对输入的文档进行一定的处理,并将处理结果传递给下一个阶段,最终得到最终的输出结果。
聚合管道操作符是指在聚合管道的每个阶段中,用于完成不同操作的工具集,如筛选、过滤、排序、修改等,是聚合管道的基本操作单位。
sql
db.collection.aggregate([
{ $stage1: { ... } },
{ $stage2: { ... } },
...
{ $stageN: { ... } }
])
# 或者 (MongoDB 3.6+)
db.aggregate([
{ $stage1: { ... } },
{ $stage2: { ... } },
...
{ $stageN: { ... } }
])
从 MongoDb 4.2
开始,可以在 update
相关的操作中使用聚合管道操作符。
sql
db.collection.updateMany(
{ <query> },
[
{ $stage1: { ... } },
{ $stage2: { ... } },
...
{ $stageN: { ... } }
]
)
所有阶段列表如下:
阶段 | 说明 |
---|---|
$addFields | 将新字段添加到输入文档。 |
$bucket | 将文档分组到指定的边界中。 |
$bucketAuto | 将文档分组到指定数量的边界中。 |
$collStats | 返回关于集合的统计信息。 |
$count | 返回输入文档的数量。 |
$currentOp | 返回当前正在运行的操作。 |
$facet | 将输入文档分组到多个聚合管道中。 |
$geoNear | 返回接近某一地理位置的有序文档。 |
$graphLookup | 递归地执行管道以查找与输入文档相关联的文档。 |
$group | 将集合中的文档分组,可用于统计结果。 |
$indexStats | 返回有关集合索引的统计信息。 |
$limit | 限制聚合管道返回的文档数。 |
$listLocalSessions | 返回当前活动的客户端会话。 |
$listSessions | 返回当前活动的客户端会话。 |
$lookup | 将来自另一个集合的文档与当前文档结合起来。 |
$match | 选择满足条件的文档,类似于 SQL 中的 WHERE 子句。 |
$merge | 将聚合管道的输出写入集合。 |
$out | 将聚合管道的输出写入集合。 |
$planCacheStats | 返回有关查询计划缓存的统计信息。 |
$project | 重组文档,可以用于重命名、增加或删除字段,也可以用于创建计算结果以及嵌套文档。 |
$redact | 限制可见性的数据。 |
$replaceRoot | 用新文档替换根文档。 |
$replaceWith | 用新文档替换输入文档。 |
$sample | 从集合中选择随机的文档。 |
$set | 设置字段的值。 |
$setDifference | 返回在第一个数组中存在但在第二个数组中不存在的元素。 |
$setEquals | 如果两个数组包含相同的元素,则返回 true 。 |
$setIntersection | 返回两个数组中都存在的元素。 |
$setIsSubset | 如果第一个数组中的每个元素都包含在第二个数组中,则返回 true 。 |
$setUnion | 返回包含所有输入数组中的唯一元素的数组。 |
$skip | 跳过指定数量的文档,并返回余下的文档。 |
$sort | 将输入文档排序后输出。 |
$sortByCount | 将文档分组并返回每个组的数量。 |
$unset | 删除字段。 |
$unwind | 将文档中的数组字段拆分为多个文档。 |