mongodb聚合管道运算符
2019-03-27 本文已影响0人
谁在烽烟彼岸
1.算术表达式运算符
算术表达式对数字执行数学运算。一些算术表达式也可以支持日期算术。
名称 | 描述 |
---|---|
$abs |
返回数字的绝对值。 |
$add |
添加数字以返回总和,或添加数字和日期以返回新日期。如果添加数字和日期,请将数字视为毫秒。接受任意数量的参数表达式,但最多只能有一个表达式解析为日期。 |
$ceil |
返回大于或等于指定数字的最小整数。 |
$divide |
返回将第一个数除以第二个数的结果。接受两个参数表达式。 |
$exp |
将e提高到指定的指数。 |
$floor |
返回小于或等于指定数字的最大整数。 |
$ln |
计算数字的自然对数。 |
$log |
计算指定基数中的数字的对数。 |
$log10 |
计算数字的对数基数10。 |
$mod |
返回第一个数字的余数除以第二个数字。接受两个参数表达式。 |
$multiply |
将数字相乘以返回产品。接受任意数量的参数表达式。 |
$pow |
将数字提高到指定的指数。 |
$sqrt |
计算平方根。 |
$subtract |
返回从第一个值中减去第二个值的结果。如果这两个值是数字,则返回差值。如果这两个值是日期,则返回以毫秒为单位的差异。如果这两个值是日期和以毫秒为单位的数字,则返回结果日期。接受两个参数表达式。如果这两个值是日期和数字,请首先指定日期参数,因为从数字中减去日期没有意义。 |
$trunc |
将数字截断为整数。 |
数组表达式运算符
$arrayElemAt |
返回指定数组索引处的元素。 |
---|---|
$arrayToObject |
将键值对数组转换为文档。 |
$concatArrays |
连接数组以返回连接数组。 |
$filter |
选择数组的子集以返回仅包含与过滤条件匹配的元素的数组。 |
$in |
返回一个布尔值,指示指定的值是否在数组中。 |
$indexOfArray |
搜索数组以查找指定值的出现并返回第一次出现的数组索引。如果未找到子字符串,则返回-1 。 |
$isArray |
确定操作数是否为数组。返回一个布尔值。 |
$map |
将子表达式应用于数组的每个元素,并按顺序返回结果值的数组。接受命名参数。 |
$objectToArray |
将文档转换为表示键值对的文档数组。 |
$range |
根据用户定义的输入输出包含整数序列的数组。 |
$reduce |
将表达式应用于数组中的每个元素,并将它们组合为单个值。 |
$reverseArray |
返回一个数组,其元素的顺序相反。 |
$size |
返回数组中的元素数。接受单个表达式作为参数。 |
$slice |
返回数组的子集。 |
$zip |
将两个数组合并在一起。 |
布尔表达式运算符
布尔表达式将其参数表达式计算为布尔值,并返回布尔值作为结果。
除了false
布尔值,布尔表达式为false
如下:null
,0
,和undefined
的值。布尔表达式将所有其他值计算为true
,包括非零数值和数组。
名称 | 描述 |
---|---|
$and |
true 仅在其所有表达式求值 时返回true 。接受任意数量的参数表达式。 |
$not |
返回与其参数表达式相反的布尔值。接受单个参数表达式。 |
$or |
true 当其任何表达式求值 时返回true 。接受任意数量的参数表达式。 |
比较表达式运算符
比较表达式返回一个布尔值,除了$cmp
返回一个数字。
$cmp |
返回0 如果这两个值是相等的,1 如果第一个值大于所述第二值,以及-1 比所述第二如果第一个值是以下。 |
---|---|
$eq |
返回true 值是否相等。 |
$gt |
true 如果第一个值大于第二个值,则返回。 |
$gte |
true 如果第一个值大于或等于第二个值,则返回。 |
$lt |
true 如果第一个值小于第二个值,则返回。 |
$lte |
true 如果第一个值小于或等于第二个值,则返回。 |
$ne |
true 如果值不相等则返回。 |
条件表达式运算符
名称 | 描述 |
---|---|
$cond |
一个三元运算符,用于计算一个表达式,并根据结果返回其他两个表达式之一的值。接受有序列表中的三个表达式或三个命名参数。 |
$ifNull |
如果第一个表达式导致null结果,则返回第一个表达式的非null结果或第二个表达式的结果。空结果包含未定义值或缺少字段的实例。接受两个表达式作为参数。第二个表达式的结果可以为null。 |
$switch |
评估一系列案例表达。当它找到一个求值的表达式时true ,$switch 执行一个指定的表达式并中断控制流。 |
日期表达式运算符
以下运算符返回日期对象或日期对象的组件:
名称 | 描述 |
---|---|
$dateFromParts |
给定日期的组成部分构造BSON Date对象。 |
$dateFromString |
将日期/时间字符串转换为日期对象。 |
$dateToParts |
返回包含日期组成部分的文档。 |
$dateToString |
以格式化字符串形式返回日期。 |
$dayOfMonth |
以1到31之间的数字返回日期的月中某天。 |
$dayOfWeek |
返回日期的星期几,作为1(星期日)和7(星期六)之间的数字。 |
$dayOfYear |
以1到366(闰年)之间的数字返回日期的日期。 |
$hour |
以0到23之间的数字返回日期的小时。 |
$isoDayOfWeek |
返回ISO 8601格式的工作日编号,范围从 1 (星期一)到7 (星期日)。 |
$isoWeek |
返回ISO 8601格式的周数,从 1 到53 。周数从1 包含年份第一个星期四的一周(星期一到星期日)开始。 |
$isoWeekYear |
以ISO 8601格式返回年份编号。年份从第1周的星期一(ISO 8601)开始,到上周的星期日(ISO 8601)结束。 |
$millisecond |
以0到999之间的数字返回日期的毫秒数。 |
$minute |
以0到59之间的数字返回日期的分钟。 |
$month |
以1(1月)到12(12月)之间的数字返回日期的月份。 |
$second |
以0到60(闰秒)之间的数字返回日期的秒数。 |
$toDate |
将值转换为日期。4.0版中的新功能。 |
$week |
返回日期的周数,作为0(在一年的第一个星期日之前的部分周)和53(闰年)之间的数字。 |
$year |
以数字形式返回日期年份(例如2014年)。 |
以下算术运算符可以采用日期操作数:
名称 | 描述 |
---|---|
$add |
添加数字和日期以返回新日期。如果添加数字和日期,请将数字视为毫秒。接受任意数量的参数表达式,但最多只能有一个表达式解析为日期。 |
$subtract |
返回从第一个值中减去第二个值的结果。如果这两个值是日期,则返回以毫秒为单位的差异。如果这两个值是日期和以毫秒为单位的数字,则返回结果日期。接受两个参数表达式。如果这两个值是日期和数字,请首先指定日期参数,因为从数字中减去日期没有意义。 |
文字表达操作符
名称 | 描述 |
---|---|
$literal |
返回一个没有解析的值。用于聚合管道可以将其解释为表达式的值。例如,将$literal 表达式用于以a开头的字符串,$ 以避免将其解析为字段路径。 |
对象表达式运算符
名称 | 描述 |
---|---|
$mergeObjects |
将多个文档合并为一个文档。版本3.6中的新功能。 |
$objectToArray |
将文档转换为表示键值对的文档数组。版本3.6中的新功能。 |
设置表达式运算符
Set表达式对数组执行set操作,将数组视为集合。Set表达式忽略每个输入数组中的重复条目以及元素的顺序。
如果set操作返回一个set,则该操作会过滤掉结果中的重复项,以输出仅包含唯一条目的数组。未指定输出数组中元素的顺序。
如果一组包含嵌套数组元素,该组表达并没有下降到嵌套阵列,但在评估顶层阵列。
名称 | 描述 |
---|---|
$allElementsTrue |
返回true 如果没有一组元素的计算结果为 false ,否则,返回false 。接受单个参数表达式。 |
$anyElementTrue |
true 如果集合中的任何元素求值, 则返回true ; 否则,返回false 。接受单个参数表达式。 |
$setDifference |
返回一个集合,其中的元素出现在第一个集合中但不出现在第二个集合中; 即,执行 第二组相对于第一组的相对补充。接受两个参数表达式。 |
$setEquals |
返回true 如果输入组具有相同的不同元素。接受两个或多个参数表达式。 |
$setIntersection |
返回包含出现在所有输入集中的元素的集合。接受任意数量的参数表达式。 |
$setIsSubset |
返回true 第一组中的所有元素是否出现在第二组中,包括第一组中的所有元素等于第二组时; 即不是严格的子集。接受两个参数表达式。 |
$setUnion |
返回包含出现在任何输入集中的元素的集合。 |
字符串表达式运算符
除了$concat
ASCII字符串之外,字符串表达式 只有明确定义的行为。
$concat
无论使用何种字符,行为都是明确定义的。
名称 | 描述 |
---|---|
$concat |
连接任意数量的字符串。 |
$dateFromString |
将日期/时间字符串转换为日期对象。 |
$dateToString |
以格式化字符串形式返回日期。 |
$indexOfBytes |
搜索字符串以查找子字符串的出现并返回第一次出现的UTF-8字节索引。如果未找到子字符串,则返回-1 。 |
$indexOfCP |
搜索字符串以查找子字符串的出现并返回第一次出现的UTF-8代码点索引。如果未找到子字符串,则返回-1
|
$ltrim |
从字符串的开头删除空格或指定的字符。4.0版中的新功能。 |
$rtrim |
从字符串末尾删除空格或指定的字符。4.0版中的新功能。 |
$split |
根据分隔符将字符串拆分为子字符串。返回一个子字符串数组。如果在字符串中找不到分隔符,则返回包含原始字符串的数组。 |
$strLenBytes |
返回字符串中UTF-8编码字节的数量。 |
$strLenCP |
返回字符串中UTF-8 代码点的数量。 |
$strcasecmp |
执行不区分大小写的字符串比较并返回: 0 如果两个字符串相同,1 如果第一个字符串大于第二个-1 字符串,并且第一个字符串小于第二个字符串。 |
$substr |
已过时。使用$substrBytes 或 $substrCP 。 |
$substrBytes |
返回字符串的子字符串。从字符串中指定的UTF-8字节索引(从零开始)开始,并继续指定的字节数。 |
$substrCP |
返回字符串的子字符串。以字符串中指定的UTF-8 代码点(CP)索引(从零开始)处的字符开始,并继续指定的代码点数。 |
$toLower |
将字符串转换为小写。接受单个参数表达式。 |
$toString |
将值转换为字符串。4.0版中的新功能。 |
$trim |
从字符串的开头和结尾删除空格或指定的字符。4.0版中的新功能。 |
$toUpper |
将字符串转换为大写。接受单个参数表达式。 |
文本表达式运算符
名称 | 描述 |
---|---|
$meta |
访问文本搜索元数据。 |
类型表达式运算符
名称 | 描述 |
---|---|
$convert |
将值转换为指定的类型。4.0版中的新功能。 |
$toBool |
将值转换为布尔值。4.0版中的新功能。 |
$toDate |
将值转换为日期。4.0版中的新功能。 |
$toDecimal |
将值转换为Decimal128。4.0版中的新功能。 |
$toDouble |
将值转换为double。4.0版中的新功能。 |
$toInt |
将值转换为整数。4.0版中的新功能。 |
$toLong |
将值转换为long。4.0版中的新功能。 |
$toObjectId |
将值转换为ObjectId。4.0版中的新功能。 |
$toString |
将值转换为字符串。4.0版中的新功能。 |
$type |
返回该字段的BSON数据类型。 |
累加器($group
)
可以在$group
阶段中使用,累加器是在文档通过管道时保持其状态(例如总数,最大值,最小值和相关数据)的运算符。
当在`$group阶段中用作累加器时,这些运算符将单个表达式作为输入,为每个输入文档计算一次表达式,并为共享相同组密钥的文档组保持其阶段。
名称 | 描述 |
---|---|
$addToSet |
返回每个组的唯一表达式值数组。数组元素的顺序未定义。 |
$avg |
返回数值的平均值。忽略非数字值。 |
$first |
返回每个组的第一个文档中的值。仅在文档按定义的顺序定义时才定义订单。 |
$last |
返回每个组的最后一个文档的值。仅在文档按定义的顺序定义时才定义订单。 |
$max |
返回每个组的最高表达式值。 |
$mergeObjects |
返回通过组合每个组的输入文档创建的文档。 |
$min |
返回每个组的最低表达式值。 |
$push |
返回每个组的表达式值数组。 |
$stdDevPop |
返回输入值的总体标准偏差。 |
$stdDevSamp |
返回输入值的样本标准偏差。 |
$sum |
返回数值的总和。忽略非数字值。 |
累加器($project
)
一些可用作$group
舞台累加器的操作员也可以在 舞台上使用, $project
但不能作为累加器使用。在$project
阶段中使用时 ,这些运算符不会保持其状态,并且可以将单个参数或多个参数作为输入。
在3.2版中更改。
以下累加器运算符也可用于 $project
和$addFields
阶段。
名称 | 描述 |
---|---|
$avg |
返回每个文档的指定表达式或表达式列表的平均值。忽略非数字值。 |
$max |
返回每个文档的指定表达式或表达式列表的最大值 |
$min |
返回每个文档的指定表达式或表达式列表的最小值 |
$stdDevPop |
返回输入值的总体标准偏差。 |
$stdDevSamp |
返回输入值的样本标准偏差。 |
$sum |
返回数值的总和。忽略非数字值。 |
变量表达式运算符
名称 | 描述 |
---|---|
$let |
定义在子表达式范围内使用的变量,并返回子表达式的结果。接受命名参数。接受任意数量的参数表达式。 |
表达式运算符的字母顺序列表
名称 | 描述 |
---|---|
$abs |
返回数字的绝对值。 |
$add |
添加数字以返回总和,或添加数字和日期以返回新日期。如果添加数字和日期,请将数字视为毫秒。接受任意数量的参数表达式,但最多只能有一个表达式解析为日期。 |
$addToSet |
返回每个组的唯一表达式值数组。数组元素的顺序未定义。仅适用于$group
|
$allElementsTrue |
返回true 如果没有一组元素的计算结果为false ,否则,返回false 。接受单个参数表达式。 |
$and |
true 仅在其所有表达式求值 时返回true 。接受任意数量的参数表达式。 |
$anyElementTrue |
true 如果集合中的任何元素求值,则返回true ; 否则,返回false 。接受单个参数表达式。 |
$arrayElemAt |
返回指定数组索引处的元素。 |
$arrayToObject |
将键值对数组转换为文档。 |
$avg |
返回数值的平均值。忽略非数字值。版本3.2中已更改:可在两个版本$group 和$project 阶段中使用。 |
$ceil |
返回大于或等于指定数字的最小整数。 |
$cmp |
返回:0 如果两个值相等,1 如果第一个值大于第二个-1 值,并且第一个值小于第二个值。 |
$concat |
连接任意数量的字符串。 |
$concatArrays |
连接数组以返回连接数组。 |
$cond |
一个三元运算符,用于计算一个表达式,并根据结果返回其他两个表达式之一的值。接受有序列表中的三个表达式或三个命名参数。 |
$convert |
将值转换为指定的类型。 |
$dateFromParts |
给定日期的组成部分构造BSON Date对象。 |
$dateToParts |
返回包含日期组成部分的文档。 |
$dateFromString |
返回日期/时间作为日期对象。 |
$dateToString |
以格式化字符串形式返回日期。 |
$dayOfMonth |
以1到31之间的数字返回日期的月中某天。 |
$dayOfWeek |
返回日期的星期几,作为1(星期日)和7(星期六)之间的数字。 |
$dayOfYear |
以1到366(闰年)之间的数字返回日期的日期。 |
$divide |
返回将第一个数除以第二个数的结果。接受两个参数表达式。 |
$eq |
返回true 值是否相等。 |
$exp |
将e提高到指定的指数。 |
$filter |
选择数组的子集以返回仅包含与过滤条件匹配的元素的数组。 |
$first |
返回每个组的第一个文档中的值。仅在文档按定义的顺序定义时才定义订单。仅适用于$group 舞台。 |
$floor |
返回小于或等于指定数字的最大整数。 |
$gt |
true 如果第一个值大于第二个值,则返回。 |
$gte |
true 如果第一个值大于或等于第二个值,则返回。 |
$hour |
以0到23之间的数字返回日期的小时。 |
$ifNull |
如果第一个表达式导致null结果,则返回第一个表达式的非null结果或第二个表达式的结果。空结果包含未定义值或缺少字段的实例。接受两个表达式作为参数。第二个表达式的结果可以为null。 |
$in |
返回一个布尔值,指示指定的值是否在数组中。 |
$indexOfArray |
搜索数组以查找指定值的出现并返回第一次出现的数组索引。如果未找到子字符串,则返回-1 。 |
$indexOfBytes |
搜索字符串以查找子字符串的出现并返回第一次出现的UTF-8字节索引。如果未找到子字符串,则返回-1 。 |
$indexOfCP |
搜索字符串以查找子字符串的出现并返回第一次出现的UTF-8代码点索引。如果未找到子字符串,则返回-1 。 |
$isArray |
确定操作数是否为数组。返回一个布尔值。 |
$isoDayOfWeek |
返回ISO 8601格式的工作日编号,范围从 1 (星期一)到7 (星期日)。 |
$isoWeek |
返回ISO 8601格式的周数,从1 到53 。周数从1 包含年份第一个星期四的一周(星期一到星期日)开始。 |
$isoWeekYear |
以ISO 8601格式返回年份编号。年份从第1周的星期一(ISO 8601)开始,到上周的星期日(ISO 8601)结束。 |
$last |
返回每个组的最后一个文档的值。仅在文档按定义的顺序定义时才定义订单。仅适用于$group
|
$let |
定义在子表达式范围内使用的变量,并返回子表达式的结果。接受命名参数。接受任意数量的参数表达式。 |
$literal |
返回一个没有解析的值。用于聚合管道可以将其解释为表达式的值。例如,将$literal 表达式用于以a开头的字符串, $ 以避免将其解析为字段路径。 |
$ln |
计算数字的自然对数。 |
$log |
计算指定基数中的数字的对数。 |
$log10 |
计算数字的对数基数10。 |
$lt |
true 如果第一个值小于第二个值,则返回。 |
$lte |
true 如果第一个值小于或等于第二个值,则返回。 |
$ltrim |
从字符串的开头删除空格或指定的字符。 |
$map |
将子表达式应用于数组的每个元素,并按顺序返回结果值的数组。接受命名参数。 |
$max |
返回每个组的最高表达式值。版本3.2中已更改:可在两个版本$group 和$project 阶段中使用。 |
$mergeObjects |
将多个文档合并为一个文档。 |
$meta |
访问文本搜索元数据。 |
$min |
返回每个组的最低表达式值。版本3.2中已更改:可在两个版本$group 和$project 阶段中使用。 |
$millisecond |
以0到999之间的数字返回日期的毫秒数。 |
$minute |
以0到59之间的数字返回日期的分钟。 |
$mod |
返回第一个数字的余数除以第二个数字。接受两个参数表达式。 |
$month |
以1(1月)到12(12月)之间的数字返回日期的月份。 |
$multiply |
将数字相乘以返回产品。接受任意数量的参数表达式。 |
$ne |
true 如果值不 相等则返回。 |
$not |
返回与其参数表达式相反的布尔值。接受单个参数表达式。 |
$objectToArray |
将文档转换为表示键值对的文档数组。 |
$or |
true 当其任何表达式求值时返回true 。接受任意数量的参数表达式。 |
$pow |
将数字提高到指定的指数。 |
$push |
返回每个组的表达式值数组。仅适用于$group
|
$range |
根据用户定义的输入输出包含整数序列的数组。 |
$reduce |
将表达式应用于数组中的每个元素,并将它们组合为单个值。 |
$reverseArray |
返回一个数组,其元素的顺序相反。 |
$rtrim |
从字符串末尾删除空格或指定的字符。 |
$second |
以0到60(闰秒)之间的数字返回日期的秒数。 |
$setDifference |
返回一个集合,其中的元素出现在第一个集合中但不出现在第二个集合中; 即,执行 第二组相对于第一组的 相对补充。接受两个参数表达式。 |
$setEquals |
返回true 如果输入组具有相同的不同元素。接受两个或多个参数表达式。 |
$setIntersection |
返回包含出现在所有输入集中的元素的集合。接受任意数量的参数表达式。 |
$setIsSubset |
返回true 第一组中的所有元素是否出现在第二组中,包括第一组中的所有元素等于第二组时; 即不是严格的子集。接受两个参数表达式。 |
$setUnion |
返回包含出现在任何输入集中的元素的集合。 |
$size |
返回数组中的元素数。接受单个表达式作为参数。 |
$slice |
返回数组的子集。 |
$split |
根据分隔符将字符串拆分为子字符串。返回一个子字符串数组。如果在字符串中找不到分隔符,则返回包含原始字符串的数组。 |
$sqrt |
计算平方根。 |
$stdDevPop |
返回输入值的总体标准偏差。版本3.2中已更改:可在两个版本$group 和$project 阶段中使用。 |
$stdDevSamp |
返回输入值的样本标准偏差。版本3.2中已更改:可在两个版本$group 和$project 阶段中使用。 |
$strcasecmp |
执行不区分大小写的字符串比较并返回:0 如果两个字符串相同,1 如果第一个字符串大于第二个-1 字符串,并且第一个字符串小于第二个字符串。 |
$strLenBytes |
返回字符串中UTF-8编码字节的数量。 |
$strLenCP |
返回字符串中UTF-8 代码点的数量。 |
$substr |
已过时。使用$substrBytes 或$substrCP 。 |
$substrBytes |
返回字符串的子字符串。从字符串中指定的UTF-8字节索引(从零开始)开始,并继续指定的字节数。 |
$substrCP |
返回字符串的子字符串。以字符串中指定的UTF-8 代码点(CP)索引(从零开始)处的字符开始,并继续指定的代码点数。 |
$subtract |
返回从第一个值中减去第二个值的结果。如果这两个值是数字,则返回差值。如果这两个值是日期,则返回以毫秒为单位的差异。如果这两个值是日期和以毫秒为单位的数字,则返回结果日期。接受两个参数表达式。如果这两个值是日期和数字,请首先指定日期参数,因为从数字中减去日期没有意义。 |
$sum |
返回数值的总和。忽略非数字值。版本3.2中已更改:可在两个版本$group 和$project 阶段中使用。 |
$switch |
评估一系列案例表达。当它找到一个求值的表达式时true ,$switch 执行一个指定的表达式并中断控制流。 |
$toBool |
将值转换为布尔值。 |
$toDate |
将值转换为日期。 |
$toDecimal |
将值转换为Decimal128。 |
$toDouble |
将值转换为double。 |
$toInt |
将值转换为整数。 |
$toLong |
将值转换为long。 |
$toObjectId |
将值转换为ObjectId。 |
$toString |
将值转换为字符串。 |
$toLower |
将字符串转换为小写。接受单个参数表达式。 |
$toUpper |
将字符串转换为大写。接受单个参数表达式。 |
$trim |
从字符串的开头和结尾删除空格或指定的字符。 |
$trunc |
将数字截断为整数。 |
$type |
返回该字段的BSON数据类型。 |
$week |
返回日期的周数,作为0(在一年的第一个星期日之前的部分周)和53(闰年)之间的数字。 |
$year |
以数字形式返回日期年份(例如2014年)。 |
$zip |
将两个数组合并在一起。 |