聚合操作符
在此页面上
聚合管道操作符与 MongoDB Atlas 和本地部署环境兼容。
注意
有关特定操作符(包括事务语法和示例)的详细信息,请单击该操作符的参考页面链接。
兼容性
您可以对在以下环境中托管的部署使用聚合管道操作符:
MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
表达式运算符
表达式操作符类似于接受参数的函数。通常,这些操作符采用参数数组,并具有以下形式:
{ <operator>: [ <argument1>, <argument2> ... ] }
如果操作符接受单个参数,则可以省略指定参数列表的外部数组:
{ <operator>: <argument> }
如果该参数是一个字面数组,为避免解析歧义,必须在 $literal
表达式中使用该字面数组,或者保留指定参数列表的外部数组。
本页列出了可用于构造 表达式的可用操作符。表达式用于以下 MQL 上下文中:
算术表达式操作符
算术表达式对数字执行数学运算。一些算术表达式也可以支持日期算术。
名称 | 说明 |
---|---|
返回一个数字的绝对值。 | |
添加数字以返回总和,或添加数字和日期以返回新日期。如果添加数字和日期,则将数字视为毫秒。接受任意数量的参数表达式,但一个表达式最多只能解析为一个日期。 | |
返回大于或等于指定数字的最小整数。 | |
返回第一个数字除以第二个数字的结果。接受两个参数表达式。 | |
将 e 提升到指定的指数。 | |
返回小于或等于指定数字 最大整数。 | |
计算数字的自然对数。 | |
以指定基数计算数字的对数。 | |
计算一个数字以 10 为底的对数。 | |
返回第一个数字除以第二个数字的余数。接受两个参数表达式。 | |
将数字相乘以返回乘积。接受任意数量的参数表达式。 | |
将一个数字提升到指定的指数。 | |
将数字舍入到整数或指定的小数位。 | |
计算平方根。 | |
返回第一个值减去第二个值后的结果。如果这两个值均为数字,则返回差值。如果这两个值均为日期,则返回以毫秒为单位的差值。如果这两个值一个为日期而另一个为数字(以毫秒为单位),则返回生成的日期。接受两个参数表达式。如果这两个值一个为日期而另一个为数字,请先指定日期参数,因为用数字减去日期没有意义。 | |
将数字截断为整数或指定的小数位。 |
数组表达式操作符
名称 | 说明 |
---|---|
返回位于指定数组索引处的元素。 | |
将键值对数组转换为文档。 | |
连接数组以返回连接后的数组。 | |
选择数组的子集,以返回仅包含与筛选条件匹配的元素的数组。 | |
从数组开头返回指定数量的元素。与 | |
返回一个布尔值,它可表示指定的值是否在数组中。 | |
搜索数组中出现的指定值,并返回首次出现的数组索引。数组索引从零开始。 | |
确定操作数是否为数组。返回一个布尔值。 | |
从数组末尾返回指定数量的元素。与 | |
对数组的每个元素应用子表达式,并按顺序返回生成值的数组。接受已命名的参数。 | |
返回数组中 | |
返回数组中 | |
将文档转换为表示键值对的文档数组。 | |
根据用户定义的输入,输出一个包含整数序列的数组。 | |
将表达式应用于数组中的每个元素,并将它们组合成一个值。 | |
返回元素顺序相反的数组。 | |
返回数组中元素的个数。接受单个表达式作为参数。 | |
返回数组的子集。 | |
对数组的元素进行排序。 | |
将两个数组进行合并。 |
按位操作符
布尔表达式操作符
布尔表达式可将其参数表达式作为布尔值进行计算,并返回一个布尔值以作为结果。
除 false
布尔值之外,布尔表达式还将以下值计算为 false
:null
、0
和 undefined
值。布尔表达式将所有其他值计算为 true
,包括非零数值和数组。
比较表达式操作符
比较表达式返回一个布尔值,但 $cmp
除外,它返回一个数字。
比较表达式接受两个参数表达式,并使用不同类型的值的指定 BSON 比较顺序来比较值和类型。
条件表达式操作符
自定义聚合表达式操作符
名称 | 说明 |
---|---|
定义自定义累加器函数。 | |
定义自定义函数。 |
数据大小操作符
以下操作符返回数据元素的大小:
名称 | 说明 |
---|---|
返回给定字符串或二进制数据值内容的大小(以字节为单位)。 | |
以字节为单位返回给定文档(即 bsontype |
日期表达式操作符
以下操作符返回日期对象或日期对象的组件:
名称 | 说明 |
---|---|
向日期对象添加多个时间单位。 | |
返回两个日期之间的差值。 | |
根据日期的组成部分构造一个 BSON 日期对象。 | |
将日期/时间字符串转换为日期对象。 | |
从日期对象中减去多个时间单位。 | |
返回包含日期组成部分的文档。 | |
以格式化字符串的形式返回日期。 | |
截断日期。 | |
以介于 1 和 31 之间的数字返回某一日期的“月中的某一天”。 | |
以 1(星期日)和 7(星期六)之间的数字形式返回以星期表示的日期。 | |
以 1 到 366(闰年)之间的数字形式返回返回日期的年月日。 | |
以数字形式返回日期中的小时部分(0 到 23)。 | |
以 ISO 8601 格式返回工作日数字,范围为 | |
以 ISO 8601 格式返回周数,范围从 | |
以 ISO 8601 格式返回年份号。一年从第一周的星期一 (ISO 8601) 开始,到最后一周的星期日 (ISO 8601) 结束。 | |
以 0 到 999 之间的数字形式返回日期的毫秒数。 | |
返回日期的分钟数(0 到 59)。 | |
以 1(一月)到 12(十二月)之间的数字形式返回日期的月份。 | |
以 0 到 60 之间的数字返回日期的秒数(跳秒)。 | |
将数值转换为日期。 | |
以 0(一年中第一个星期日之前的部分周)和 53(闰年)之间的数字形式返回日期的周数。 | |
以数字形式返回日期的年份(例如 2014)。 |
以下算术操作符可以使用日期操作数:
字面值表达式操作符
其他操作符
名称 | 说明 |
---|---|
从文档中返回指定字段的值。您可以使用 版本 5.0 中的新增功能。 | |
返回介于 0 和 1 之间的随机浮点数。 | |
以给定的采样率随机选择文档。虽然每次运行所选文件的确切数量各不相同,但所选数量近似于以文件总数百分比表示的采样率。 | |
使用 MongoDB 用于创建哈希索引的相同哈希函数计算并返回输入表达式的哈希值。 |
对象表达式操作符
名称 | 说明 |
---|---|
将多个文档合并为一个文档。 | |
将文档转换为表示键值对的文档数组。 | |
添加、更新或删除文档中的指定字段。您可以使用 版本 5.0 中的新增功能。 |
集表达式操作符
集合表达式对数组执行集合操作,将数组视为集合。集合表达式会忽略每个输入数组中的重复条目和元素的顺序。
如果集操作返回一个集,则该操作会筛选掉结果中的重复项,以输出仅包含唯一条目的数组。输出数组中元素的顺序未指定。
如果集合包含嵌套数组元素,则集合表达式不会进入嵌套数组,而是在顶层计算数组。
名称 | 说明 |
---|---|
如果集合中没有元素计算结果为 | |
如果集合中的任何元素的计算结果为 | |
如果输入集具有相同的不同元素,则返回 | |
返回一个集,其中包含出现在所有输入集中的元素。接受任意数量的参数表达式。 | |
如果第一个集的所有元素都出现在第二个集中,包括当第一个集等于第二个集时,即不是严格子集,则返回 | |
返回一个集,其中包含出现在任何输入集中的元素。 |
字符串表达式操作符
字符串表达式,除了 $concat
之外,字符串表达式只对 ASCII 字符串有明确定义的行为。
$concat
行为是明确定义的,无论使用什么字符。
名称 | 说明 |
---|---|
连接任意数量的字符串。 | |
将日期/时间字符串转换为日期对象。 | |
以格式化字符串的形式返回日期。 | |
搜索字符串中出现的子字符串,并返回首次出现的 UTF-8 字节索引。如果未找到该子字符串,则返回 | |
在字符串中搜索子字符串的出现位置,并返回第一次出现时的 UTF-8 码位索引。如果未找到该子字符串,则返回 | |
删除字符串开头和结尾的空白或指定字符。 | |
将正则表达式应用于字符串,并返回第一个匹配子字符串的信息。 | |
将正则表达式 (regex) 应用于字符串,并返回有关所有匹配子字符串的信息。 | |
将正则表达式 (regex) 应用于字符串并返回一个布尔值,它可表示是否已找到匹配项。 | |
替换给定输入中匹配字符串的第一个实例。 | |
替换给定输入中匹配字符串的所有实例。 | |
删除字符串结尾的空白或指定字符。 | |
根据分隔符将字符串拆分为子字符串。返回子字符串数组。如果在字符串中找不到分隔符,则返回包含原始字符串的数组。 | |
返回字符串中 UTF-8 编码的字节数。 | |
返回字符串中 UTF-8 代码点的数量。 | |
执行不区分大小写的字符串比较并返回:如果两个字符串相等,则返回 | |
已弃用。使用 | |
返回字符串的子串。从字符串中指定的 UTF-8 字节索引(从零开始)处的字符开始,持续指定的字节数。 | |
返回字符串的子串。从字符串中指定 UTF-8 代码点 (CP) 索引(从零开始)处的字符开始,持续指定的代码点数。 | |
将字符串转换为小写。接受单个参数表达式。 | |
将值转换为字符串。 | |
删除字符串开头和结尾的空白或指定字符。 | |
将字符串转换为大写。接受单个参数表达式。 |
文本表达式操作符
名称 | 说明 |
---|---|
访问与聚合操作相关的每个文档的可用元数据。 |
时间戳表达式操作符
时间戳表达式操作符从时间戳返回值。
三角函数表达式操作符
三角表达式对数字执行三角运算。示角度的值始终以弧度为单位输入或输出。使用 $degreesToRadians
和 $radiansToDegrees
在度数和弧度测量值之间转换。
名称 | 说明 |
---|---|
返回以弧度为单位测量的某一值的正弦值。 | |
返回以弧度为单位测量的某一值的余弦。 | |
返回以弧度为单位来测量的某一值的正切值。 | |
以弧度为单位返回值的反正弦。 | |
以弧度为单位返回值的反余弦。 | |
以弧度为单位返回某一值的反切值(弧正切值)。 | |
以弧度为单位返回 | |
以弧度为单位返回数值的反双曲正弦(双曲弧正弦)值。 | |
以弧度为单位返回数值的反双曲余弦(双曲弧余弦)值。 | |
以弧度为单位返回数值的反双曲正切(双曲弧切)值。 | |
返回以弧度为单位来测量的某一值的双曲正弦值。 | |
返回以弧度为单位的值的双曲余弦值。 | |
以弧度为单位返回数值的双曲正切值。 | |
将值从度数转换为弧度。 | |
将值从弧度转换为度数。 |
类型表达式操作符
名称 | 说明 |
---|---|
将数值转换为指定类型。 | |
将值转换为布尔值。 | |
将数值转换为日期。 | |
将值转换为 Decimal128。 | |
将值转换为 double。 | |
将值转换为整数。 | |
将值转换为长整数。 | |
将值转换为 ObjectId。 | |
将值转换为字符串。 | |
返回字段的 BSON 数据类型。 | |
将字符串转换为 UUID。 |
累加器 ($group, $bucket, $bucketAuto, $setWindowFields
)
聚合累加器操作符:
在文件通过聚合管道时保持其状态。
返回总计值、最大值、最小值和其他值。
可在以下聚合管道阶段中使用:
$setWindowFields
,从 MongoDB 5.0 开始(除非使用$accumulator
或$mergeObjects
操作符,它们不能与$setWindowFields
一起使用)
5.0 版本中的更改。
名称 | 说明 |
---|---|
返回用户定义的累加器函数的结果。 | |
返回每个群组的唯一表达式值数组。未定义数组元素的排序。 5.0 版中的更改:可在 | |
返回数值的平均值。忽略非数字值。 5.0 版中的更改:可在 | |
返回群组中第一个文档的表达式结果。 5.0 版中的更改:可在 | |
返回群组内前 5.2 版新增功能:可在 | |
返回群组中最后一份文档的表达式结果。 5.0 版中的更改:可在 | |
返回群组内后 5.2 版新增功能:可在 | |
返回每个群组的最大表达式值。 5.0 版中的更改:可在 | |
返回通过组合每个组的输入文档创建的文档。 | |
返回每个群组的最小表达式值。 5.0 版中的更改:可在 | |
返回每组中文档的大量表达式值。 5.0 版中的更改:可在 | |
返回输入值的总体标准偏差。 5.0 版中的更改:可在 | |
返回输入值的样本标准偏差。 5.0 版中的更改:可在 | |
返回数值的总和。忽略非数字值。 5.0 版中的更改:可在 | |
累加器(其他阶段中)
一些可用作 $group
阶段累加器的操作符也可用于其他阶段,但不能作为累加器。用于其他阶段使用,这些操作符不维护其状态,并且可以将单个参数或多个参数作为输入。有关详细信息,请参阅特定操作符页面。
5.0 版本中的更改。
以下累加器操作符在 $project
、$addFields
、$set
、(从 MongoDB 5.0 开始)$setWindowFields
阶段中也可用。
变量表达式操作符
名称 | 说明 |
---|---|
定义要在子表达式范围内使用的变量,并返回这些子表达式的结果。接受已命名的参数。 接受任意数量的参数表达式。 |
窗口运算符
版本 5.0 中的新增功能。
窗口操作符从集合(称为窗口)中定义的文档范围返回值。窗口在 $setWindowFields
阶段定义,从 MongoDB 5.0 开始可用。
以下窗口操作符可在 $setWindowFields
阶段使用。
名称 | 说明 |
---|---|
返回对每份文档应用表达式所产生的所有唯一值的数组。 5.0 版中的更改:可在 | |
返回指定表达式的平均值。忽略非数字值。 5.0 版中的更改:可在 | |
返回两个数值表达式的总体协方差。 版本 5.0 中的新增功能。 | |
返回两个数值表达式的样本协方差。 版本 5.0 中的新增功能。 | |
返回某文档在 版本 5.0 中的新增功能。 | |
返回指定窗口内的平均变化率。 版本 5.0 中的新增功能。 | |
返回文档在 版本 5.0 中的新增功能。 | |
返回数值表达式的指数移动平均值。 版本 5.0 中的新增功能。 | |
返回组或 窗口 中第一个文档的 表达式 结果。 5.0 版中的更改:可在 | |
返回曲线下面积的近似值。 版本 5.0 中的新增功能。 | |
返回组或 窗口 中最后一个文档的 表达式 结果。 5.0 版中的更改:可在 | |
返回对每份文档应用表达式后的最小值。 5.0 版中的更改:可在 | |
返回对每份文档应用表达式后的最小值。 5.0 版中的更改:可在 | |
返回对每个文档应用表达式后所得值的数组。 5.0 版中的更改:可在 | |
返回一个文档在 版本 5.0 中的新增功能。 | |
返回在 版本 5.0 中的新增功能。 | |
返回对每个文档应用数值表达式所得的总体标准差。 5.0 版中的更改:可在 | |
返回对每个文档应用数值表达式所得的样本标准差。 5.0 版中的更改:可在 | |
返回对每份文档应用数值表达式所得的总和。 5.0 版中的更改:可在 | |
有关管道阶段,请参阅聚合阶段。