Docs 菜单
Docs 主页
/
MongoDB Manual
/ /

聚合操作符

在此页面上

  • 兼容性
  • 表达式运算符
  • 算术表达式操作符
  • 数组表达式操作符
  • 按位操作符
  • 布尔表达式操作符
  • 比较表达式操作符
  • 条件表达式操作符
  • 自定义聚合表达式操作符
  • 数据大小操作符
  • 日期表达式操作符
  • 字面值表达式操作符
  • 其他操作符
  • 对象表达式操作符
  • 集表达式操作符
  • 字符串表达式操作符
  • 文本表达式操作符
  • 时间戳表达式操作符
  • 三角函数表达式操作符
  • 类型表达式操作符
  • 累加器 ($group, $bucket, $bucketAuto, $setWindowFields )
  • 累加器(其他阶段中)
  • 变量表达式操作符
  • 窗口运算符

聚合管道操作符与 MongoDB Atlas 和本地部署环境兼容。

注意

有关特定操作符(包括事务语法和示例)的详细信息,请单击该操作符的参考页面链接。

您可以对在以下环境中托管的部署使用聚合管道操作符:

  • MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务

  • MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本

  • MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本

表达式操作符类似于接受参数的函数。通常,这些操作符采用参数数组,并具有以下形式:

{ <operator>: [ <argument1>, <argument2> ... ] }

如果操作符接受单个参数,则可以省略指定参数列表的外部数组:

{ <operator>: <argument> }

如果该参数是一个字面数组,为避免解析歧义,必须在 $literal 表达式中使用该字面数组,或者保留指定参数列表的外部数组。

本页列出了可用于构造 表达式的可用操作符。表达式用于以下 MQL 上下文中:

算术表达式对数字执行数学运算。一些算术表达式也可以支持日期算术。

名称
说明
返回一个数字的绝对值。
添加数字以返回总和,或添加数字和日期以返回新日期。如果添加数字和日期,则将数字视为毫秒。接受任意数量的参数表达式,但一个表达式最多只能解析为一个日期。
返回大于或等于指定数字的最小整数。
返回第一个数字除以第二个数字的结果。接受两个参数表达式。
e 提升到指定的指数。
返回小于或等于指定数字 最大整数。
计算数字的自然对数。
以指定基数计算数字的对数。
计算一个数字以 10 为底的对数。
返回第一个数字除以第二个数字的余数。接受两个参数表达式。
将数字相乘以返回乘积。接受任意数量的参数表达式。
将一个数字提升到指定的指数。
将数字舍入到整数指定的小数位。
计算平方根。
返回第一个值减去第二个值后的结果。如果这两个值均为数字,则返回差值。如果这两个值均为日期,则返回以毫秒为单位的差值。如果这两个值一个为日期而另一个为数字(以毫秒为单位),则返回生成的日期。接受两个参数表达式。如果这两个值一个为日期而另一个为数字,请先指定日期参数,因为用数字减去日期没有意义。
将数字截断为整数指定的小数位。
名称
说明
返回位于指定数组索引处的元素。
将键值对数组转换为文档。
连接数组以返回连接后的数组。
选择数组的子集,以返回仅包含与筛选条件匹配的元素的数组。
从数组开头返回指定数量的元素。与 $firstN 累加器不同。
返回一个布尔值,它可表示指定的值是否在数组中。
搜索数组中出现的指定值,并返回首次出现的数组索引。数组索引从零开始。
确定操作数是否为数组。返回一个布尔值。
从数组末尾返回指定数量的元素。与 $lastN 累加器不同。
对数组的每个元素应用子表达式,并按顺序返回生成值的数组。接受已命名的参数。
返回数组中 n 个最大值。与 $maxN 累加器不同。
返回数组中 n 个最小值。与 $minN 累加器不同。
将文档转换为表示键值对的文档数组。
根据用户定义的输入,输出一个包含整数序列的数组。
将表达式应用于数组中的每个元素,并将它们组合成一个值。
返回元素顺序相反的数组。
返回数组中元素的个数。接受单个表达式作为参数。
返回数组的子集。
对数组的元素进行排序。
将两个数组进行合并。
名称
说明

返回对 intlong 值的数组执行按位 and 操作的结果。

6.3 版本中的新功能

返回对单个参数或包含单个 intlong 值的数组执行按位 not 操作的结果。

6.3 版本中的新功能

返回对 intlong 值的数组执行按位 or 操作的结果。

6.3 版本中的新功能

返回对 intlong 值的数组执行按位 xor(排他或)操作的结果。

6.3 版本中的新功能

布尔表达式可将其参数表达式作为布尔值进行计算,并返回一个布尔值以作为结果。

false 布尔值之外,布尔表达式还将以下值计算为 falsenull0undefined 值。布尔表达式将所有其他值计算为 true,包括非零数值和数组。

名称
说明
仅当所有表达式的计算结果均为 true 时才返回 true。接受任意数量的参数表达式。
返回与参数表达式相反的布尔值。接受单个参数表达式。
任何 表达式的计算结果为 true 时,返回 true。接受任意数量的参数表达式。

比较表达式返回一个布尔值,但 $cmp 除外,它返回一个数字。

比较表达式接受两个参数表达式,并使用不同类型的值的指定 BSON 比较顺序来比较值和类型。

名称
说明
如果两个值相等,则返回 0;如果第一个值大于第二个值,则返回 1;如果第一个值小于第二个值,则返回 -1
如果这些值相等,则返回 true
如果第一个值大于第二个值,则返回 true
如果第一个值大于等于第二个值,则返回 true
如果第一个值小于第二个值,则返回 true
如果第一个值小于等于第二个值,则返回 true
如果值相等,则返回 true
名称
说明
一种三元运算符,它可用于计算一个表达式,并根据结果返回另外两个表达式之一的值。接受有序列表中的三个表达式或三个已命名的参数。
返回第一个表达式的非空结果;或者,如果第一个表达式生成空结果,则返回第二个表达式的结果。Null 结果包含未定义值或缺失字段的情况。接受两个表达式以作为参数。第二个表达式的结果可能为 null。
对一系列 case 表达式求值。当它找到计算结果为 true 的表达式时,$switch 会执行指定表达式并脱离控制流。
名称
说明
定义自定义累加器函数。
定义自定义函数。

以下操作符返回数据元素的大小:

名称
说明
返回给定字符串或二进制数据值内容的大小(以字节为单位)。
以字节为单位返回给定文档(即 bsontype Object) 的大小(当编码为 BSON 时)。

以下操作符返回日期对象或日期对象的组件:

名称
说明
向日期对象添加多个时间单位。
返回两个日期之间的差值。
根据日期的组成部分构造一个 BSON 日期对象。
将日期/时间字符串转换为日期对象。
从日期对象中减去多个时间单位。
返回包含日期组成部分的文档。
以格式化字符串的形式返回日期。
截断日期。
以介于 1 和 31 之间的数字返回某一日期的“月中的某一天”。
以 1(星期日)和 7(星期六)之间的数字形式返回以星期表示的日期。
以 1 到 366(闰年)之间的数字形式返回返回日期的年月日。
以数字形式返回日期中的小时部分(0 到 23)。
以 ISO 8601 格式返回工作日数字,范围为 1(星期一)到 7(星期日)。
以 ISO 8601 格式返回周数,范围从 153。周数从 1 开始,即包含一年中第一个星期四的那个星期(星期一到星期日)。
以 ISO 8601 格式返回年份号。一年从第一周的星期一 (ISO 8601) 开始,到最后一周的星期日 (ISO 8601) 结束。
以 0 到 999 之间的数字形式返回日期的毫秒数。
返回日期的分钟数(0 到 59)。
以 1(一月)到 12(十二月)之间的数字形式返回日期的月份。
以 0 到 60 之间的数字返回日期的秒数(跳秒)。
将数值转换为日期。
以 0(一年中第一个星期日之前的部分周)和 53(闰年)之间的数字形式返回日期的周数。
以数字形式返回日期的年份(例如 2014)。

以下算术操作符可以使用日期操作数:

名称
说明
添加数字和日期以返回新日期。如果添加数字和日期,则将数字视为毫秒。接受任意数量的参数表达式,但一个表达式最多只能解析为一个日期。
返回第一个值减去第二个值后的结果。如果这两个值均为日期,则返回以毫秒为单位的差值。如果这两个值一个为日期而另一个为数字(以毫秒为单位),则返回生成的日期。接受两个参数表达式。如果这两个值一个为日期而另一个为数字,请先指定日期参数,因为用数字减去日期没有意义。
名称
说明
返回一个值而不进行解析。用于聚合管道可解释为表达式的值。例如,对以美元符号 ($) 开头的字符串使用 $literal 表达式,以避免解析为字段路径。
名称
说明

从文档中返回指定字段的值。您可以使用 $getField 检索名称中包含句点 (.) 或以美元符号 ($) 开头的字段的值。

版本 5.0 中的新增功能

返回介于 0 和 1 之间的随机浮点数。
以给定的采样率随机选择文档。虽然每次运行所选文件的确切数量各不相同,但所选数量近似于以文件总数百分比表示的采样率。
使用 MongoDB 用于创建哈希索引的相同哈希函数计算并返回输入表达式的哈希值。
名称
说明
将多个文档合并为一个文档。
将文档转换为表示键值对的文档数组。

添加、更新或删除文档中的指定字段。您可以使用 $setField 添加、更新或删除名称包含句点 (.) 或以美元符号 ($) 开头的字段。

版本 5.0 中的新增功能

集合表达式对数组执行集合操作,将数组视为集合。集合表达式会忽略每个输入数组中的重复条目和元素的顺序。

如果集操作返回一个集,则该操作会筛选掉结果中的重复项,以输出仅包含唯一条目的数组。输出数组中元素的顺序未指定。

如果集合包含嵌套数组元素,则集合表达式不会进入嵌套数组,而是在顶层计算数组。

名称
说明
如果集合中没有元素计算结果为 false ,则返回 true,否则返回 false。接受单个参数表达式。
如果集合中的任何元素的计算结果为 true,则返回 true;否则,返回 false。接受单个参数表达式。
返回一个集,其中包含出现在第一个集中但未出现在第二个集中的元素; ie 执行 相对补 第二组相对于第一组的大小。只接受两个参数表达式。
如果输入集具有相同的不同元素,则返回 true。接受两个或多个参数表达式。
返回一个集,其中包含出现在所有输入集中的元素。接受任意数量的参数表达式。
如果第一个集的所有元素都出现在第二个集中,包括当第一个集等于第二个集时,即不是严格子集,则返回 true。实际接受两个参数表达式。
返回一个集,其中包含出现在任何输入集中的元素。

字符串表达式,除了 $concat 之外,字符串表达式只对 ASCII 字符串有明确定义的行为。

$concat 行为是明确定义的,无论使用什么字符。

名称
说明
连接任意数量的字符串。
将日期/时间字符串转换为日期对象。
以格式化字符串的形式返回日期。
搜索字符串中出现的子字符串,并返回首次出现的 UTF-8 字节索引。如果未找到该子字符串,则返回 -1
在字符串中搜索子字符串的出现位置,并返回第一次出现时的 UTF-8 码位索引。如果未找到该子字符串,则返回 -1
删除字符串开头和结尾的空白或指定字符。
将正则表达式应用于字符串,并返回第一个匹配子字符串的信息。
将正则表达式 (regex) 应用于字符串,并返回有关所有匹配子字符串的信息。
将正则表达式 (regex) 应用于字符串并返回一个布尔值,它可表示是否已找到匹配项。
替换给定输入中匹配字符串的第一个实例。
替换给定输入中匹配字符串的所有实例。
删除字符串结尾的空白或指定字符。
根据分隔符将字符串拆分为子字符串。返回子字符串数组。如果在字符串中找不到分隔符,则返回包含原始字符串的数组。
返回字符串中 UTF-8 编码的字节数。
返回字符串中 UTF-8 代码点的数量。
执行不区分大小写的字符串比较并返回:如果两个字符串相等,则返回 0;如果第一个字符串大于第二个字符串,则返回 1;如果第一个字符串小于第二个字符串,则返回 -1
已弃用。使用$substrBytes$substrCP
返回字符串的子串。从字符串中指定的 UTF-8 字节索引(从零开始)处的字符开始,持续指定的字节数。
返回字符串的子串。从字符串中指定 UTF-8 代码点 (CP) 索引(从零开始)处的字符开始,持续指定的代码点数。
将字符串转换为小写。接受单个参数表达式。
将值转换为字符串。
删除字符串开头和结尾的空白或指定字符。
将字符串转换为大写。接受单个参数表达式。
名称
说明
访问与聚合操作相关的每个文档的可用元数据。

时间戳表达式操作符从时间戳返回值。

名称
说明

long 形式返回时间戳中的递增序数。

5.1 版本中的新功能

long 形式返回时间戳中的秒数。

5.1 版本中的新功能

三角表达式对数字执行三角运算。示角度的值始终以弧度为单位输入或输出。使用 $degreesToRadians$radiansToDegrees 在度数和弧度测量值之间转换。

名称
说明
返回以弧度为单位测量的某一值的正弦值。
返回以弧度为单位测量的某一值的余弦。
返回以弧度为单位来测量的某一值的正切值。
以弧度为单位返回值的反正弦。
以弧度为单位返回值的反余弦。
以弧度为单位返回某一值的反切值(弧正切值)。
以弧度为单位返回 y / x 的反正切,其中 yx 分别为传递给该表达式的第一个值和第二个值。
以弧度为单位返回数值的反双曲正弦(双曲弧正弦)值。
以弧度为单位返回数值的反双曲余弦(双曲弧余弦)值。
以弧度为单位返回数值的反双曲正切(双曲弧切)值。
返回以弧度为单位来测量的某一值的双曲正弦值。
返回以弧度为单位的值的双曲余弦值。
以弧度为单位返回数值的双曲正切值。
将值从度数转换为弧度。
将值从弧度转换为度数。
名称
说明
将数值转换为指定类型。

如果指定表达式解析为 integerdecimaldoublelong,则返回布尔值 true

如果表达式解析为任何其他 BSON 类型null 或缺失字段,返回布尔值 false

将值转换为布尔值。
将数值转换为日期。
将值转换为 Decimal128。
将值转换为 double。
将值转换为整数。
将值转换为长整数。
将值转换为 ObjectId。
将值转换为字符串。
返回字段的 BSON 数据类型。
将字符串转换为 UUID

聚合累加器操作符:

5.0 版本中的更改

名称
说明
返回用户定义的累加器函数的结果。

返回每个群组的唯一表达式值数组。未定义数组元素的排序。

5.0 版中的更改:可在 $setWindowFields 阶段使用。

返回数值的平均值。忽略非数字值。

5.0 版中的更改:可在 $setWindowFields 阶段使用。

根据指定的排序顺序返回组内的底部元素。

5.2 版本中的新增功能

可在 $group$setWindowFields 阶段使用。

根据指定的排序顺序,返回群组内后 n 个字段的聚合。

5.2 版本中的新增功能

可在 $group$setWindowFields 阶段使用。

返回群组中的文档数。

有别于 $count 管道阶段。

5.0 版新增功能:可在 $group$setWindowFields 阶段使用。

返回组中第一个文档的表达式结果。

5.0 版中的更改:可在 $setWindowFields 阶段使用。

返回群组内前 n 个元素的聚合。仅当文档按定义的顺序排列时才有意义。与 $firstN 数组操作符不同。

5.2 版新增功能:可在 $group表达式$setWindowFields 阶段使用。

返回群组中最后一份文档的表达式结果。

5.0 版中的更改:可在 $setWindowFields 阶段使用。

返回群组内后 n 个元素的聚合。仅当文档按定义的顺序排列时才有意义。与 $lastN 数组操作符不同。

5.2 版新增功能:可在 $group表达式$setWindowFields 阶段使用。

返回每个群组的最大表达式值。

5.0 版中的更改:可在 $setWindowFields 阶段使用。

返回群组中 n 个最大值元素的聚合。与 $maxN 数组操作符不同。

5.2 版本中的新增功能

$group$setWindowFields 中可用,以及用作表达式

返回中位数(第 50 百分位数)的近似标量值。

7.0 版本中的新增功能

此操作符可在以下阶段用作累加器:

它也可用作聚合表达式

返回通过组合每个组的输入文档创建的文档。

返回每个群组的最小表达式值。

5.0 版中的更改:可在 $setWindowFields 阶段使用。

返回组中 n 个最小值元素的聚合。与 $minN 数组操作符不同。

5.2 版本中的新增功能

$group$setWindowFields 中可用,以及用作表达式

返回与指定的各百分位数一一对应的标量值数组。

7.0 版本中的新增功能

此操作符可在以下阶段用作累加器:

它也可用作聚合表达式

返回每组中文档的大量表达式值。

5.0 版中的更改:可在 $setWindowFields 阶段使用。

返回输入值的总体标准偏差。

5.0 版中的更改:可在 $setWindowFields 阶段使用。

返回输入值的样本标准偏差。

5.0 版中的更改:可在 $setWindowFields 阶段使用。

返回数值的总和。忽略非数字值。

5.0 版中的更改:可在 $setWindowFields 阶段使用。

根据指定的排序顺序返回群组内第一个元素。

5.2 版本中的新增功能

可在 $group$setWindowFields 阶段使用。

根据指定的排序顺序,返回群组内前 n 个字段的聚合。

5.2 版本中的新增功能

可在 $group$setWindowFields 阶段使用。

一些可用作 $group 阶段累加器的操作符也可用于其他阶段,但不能作为累加器。用于其他阶段使用,这些操作符不维护其状态,并且可以将单个参数或多个参数作为输入。有关详细信息,请参阅特定操作符页面。

5.0 版本中的更改

以下累加器操作符在 $project$addFields$set、(从 MongoDB 5.0 开始)$setWindowFields 阶段中也可用。

名称
说明
返回每个文档中指定表达式或表达式列表的平均值。忽略非数字值。
返回组中第一个文档的表达式结果。
返回群组中最后一份文档的表达式结果。
返回每个文档中指定表达式或表达式列表的最大值

返回中位数(第 50 百分位数)的近似标量值。

7.0 版本中的新增功能

此操作符可在以下阶段用作累加器:

它也可用作聚合表达式

返回针对每个文档的指定表达式或表达式列表的最小值

返回与指定的各百分位数一一对应的标量值数组。

7.0 版本中的新增功能

此操作符可在以下阶段用作累加器:

它也可用作聚合表达式

返回输入值的总体标准偏差。
返回输入值的样本标准偏差。
返回数值的总和。忽略非数字值。
名称
说明

定义要在子表达式范围内使用的变量,并返回这些子表达式的结果。接受已命名的参数。

接受任意数量的参数表达式。

版本 5.0 中的新增功能

窗口操作符从集合(称为窗口)中定义的文档范围返回值。窗口$setWindowFields 阶段定义,从 MongoDB 5.0 开始可用。

以下窗口操作符可在 $setWindowFields 阶段使用。

名称
说明

返回对每份文档应用表达式所产生的所有唯一值的数组。

5.0 版中的更改:可在 $setWindowFields 阶段使用。

返回指定表达式的平均值。忽略非数字值。

5.0 版中的更改:可在 $setWindowFields 阶段使用。

根据指定的排序顺序返回组内的底部元素。

5.2 版本中的新增功能

可在 $group$setWindowFields 阶段使用。

根据指定的排序顺序,返回群组内后 n 个字段的聚合。

5.2 版本中的新增功能

可在 $group$setWindowFields 阶段使用。

返回群组或窗口中的文档数。

有别于 $count 管道阶段。

版本 5.0 中的新增功能

返回两个数值表达式的总体协方差。

版本 5.0 中的新增功能

返回两个数值表达式的样本协方差。

版本 5.0 中的新增功能

返回某文档在 $setWindowFields 阶段分区中相对于其他文档的位置(称为排名)。这些排名没有差异。并列可获得相同排名。

版本 5.0 中的新增功能

返回指定窗口内的平均变化率。

版本 5.0 中的新增功能

返回文档在 $setWindowFields 阶段分区中的位置(称为文档编号)并列会导致相邻文件编号不同。

版本 5.0 中的新增功能

返回数值表达式的指数移动平均值。

版本 5.0 中的新增功能

返回组或窗口中第一个文档的表达式的结果。

5.0 版中的更改:可在 $setWindowFields 阶段使用。

返回曲线下面积的近似值。

版本 5.0 中的新增功能

返回组或窗口中最后一份文档的表达式结果。

5.0 版中的更改:可在 $setWindowFields 阶段使用。

使用线性插值并根据相邻的字段值来填充窗口中的 null 和缺失字段。

可在 $setWindowFields 阶段使用。

5.3 版本中的新增功能

最后一次的观察结果被延续了下来。将窗口null 和缺失字段的值设置为该字段的最后一个非 null 值。

可在 $setWindowFields 阶段使用。

5.2 版本中的新增功能

返回对每份文档应用表达式所得的最大值。

5.0 版中的更改:可在 $setWindowFields 阶段使用。

返回对每份文档应用表达式所得的最小值。

5.0 版中的更改:可在 $setWindowFields 阶段使用。

返回组中 n 个最小值元素的聚合。与 $minN 数组操作符不同。

5.2 版本中的新增功能

$group$setWindowFields 中可用,以及用作表达式

返回对每个文档应用表达式后所得值的数组。

5.0 版中的更改:可在 $setWindowFields 阶段使用。

返回一个文档在 $setWindowFields 阶段分区中相对于其他文档的位置(称为排名)。

版本 5.0 中的新增功能

返回在 $setWindowFields 阶段的分区中,应用于某一文档的表达式的值。该文档通过与当前文档的相对位置进行指定。

版本 5.0 中的新增功能

返回对每个文档应用数值表达式所得的总体标准差。

5.0 版中的更改:可在 $setWindowFields 阶段使用。

返回对每个文档应用数值表达式所得的样本标准差。

5.0 版中的更改:可在 $setWindowFields 阶段使用。

返回对每份文档应用数字表达式所得的总和。

5.0 版中的更改:可在 $setWindowFields 阶段使用。

根据指定的排序顺序返回群组内第一个元素。

5.2 版本中的新增功能

可在 $group$setWindowFields 阶段使用。

根据指定的排序顺序,返回群组内前 n 个字段的聚合。

5.2 版本中的新增功能

可在 $group$setWindowFields 阶段使用。

有关管道阶段,请参阅聚合阶段

后退

$vectorSearch