Skip to content

本节列举一些常用的操作符,更多操作符请参考: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将文档中的数组字段拆分为多个文档。