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如下:null0,和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格式的周数,从 153。周数从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 返回包含出现在任何输入集中的元素的集合。

字符串表达式运算符

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

$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格式的周数,从153。周数从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 将两个数组合并在一起。
上一篇下一篇

猜你喜欢

热点阅读