mongodb聚合管道运算符

1.算术表达式运算符

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

名称描述
$abs返回数字的绝对值。
$add添加数字以返回总和,或添加数字和日期以返回新日期。如果添加数字和日期,请将数字视为毫秒。接受任意数量的参数表达式,但最多只能有一个表达式解析为日期。
$ceil返回大于或等于指定数字的最小整数。
$divide返回将第一个数除以第二个数的结果。接受两个参数表达式。
$expe提高到指定的指数。
$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值是否相等。
$expe提高到指定的指数。
$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将两个数组合并在一起。
### 回答1: 在 MongoDB 聚合操作中,可以使用 `$toInt` 运算符将字符串转换为整数。下面是一个使用 `$toInt` 的聚合示例: ``` db.collection.aggregate([ { $project: { stringField: 1, intField: { $toInt: "$stringField" } } } ]) ``` 在上面的聚合操作中,使用 `$project` 聚合阶段来创建一个新的文档,并使用 `$toInt` 运算符将名为 `stringField` 的字段中的字符串转换为整数,并将结果存储在名为 `intField` 的新字段中。 需要注意的是,如果字符串无法转换为整数,将返回 `null`。此外,在 MongoDB 4.0 之前的版本中,如果使用 `$toInt` 运算符将一个非数字字符串转换为整数,将会抛出错误。从 MongoDB 4.0 开始,如果无法转换为整数,则将返回 `null`。 ### 回答2: 在MongoDB聚合操作中,我们可以使用一些聚合管道操作符将字符串转换为整数。下面是一种常见的方法: 使用$convert操作符: ``` db.collection.aggregate([ { $project: { convertedValue: { $convert: { input: "$stringField", to: "int", onError: 0, // 当转换失败时,设定默认值为0 onNull: 0 // 当输入值为null时,设定默认值为0 } } } } ]) ``` 在上述示例中,我们使用了$project操作符来创建一个新字段"convertedValue",该字段的值是将"stringField"字段转换为整数后的结果。我们使用了$convert操作符来执行转换操作。设置了to参数为"int",以将字符串转换为整数。 此外,我们还可以使用其他一些聚合管道操作符来处理字符串转换为整数的场景,例如$toInt、$toIntOrNull、$toIntOrDefault等。具体使用哪个操作符取决于您的需求和数据的情况。 总的来说,在MongoDB聚合操作中,有多种方法可以将字符串转换为整数。您可以根据实际情况选择最适合您需求的操作符。 ### 回答3: 在MongoDB中,聚合操作是用于对集合中的文档进行计算和转换的强大工具。要将字符串转换为整数,您可以使用聚合操作中的$toInt算子。 $toInt算子用于将输入值转换为整数。它可以将字符串转换为整数,也可以将浮点数、布尔值甚至是日期对象转换为整数。 下面是一个示例,展示如何在聚合管道中使用$toInt算子将字符串转换为整数: ``` db.collection.aggregate([ { $project: { convertedValue: { $toInt: "$stringValue" } } } ]) ``` 在上面的示例中,我们使用$project阶段将stringValue字段的值转换为整数,并将结果存储在新的convertedValue字段中。您可以根据需要调整$project阶段的内容和其他聚合阶段。 需要注意的是,如果要转换的字符串包含非数字字符,将会发生转换错误。因此,在执行转换之前,请确保字符串仅包含数字字符。 希望这个回答对您有帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值