注意
有关特定运算符的详细信息,包括语法和示例,请单击特定运算符以转到其参考页。
在这个部分
运算符表达式类似于带有参数的函数。通常,这些表达式采用参数数组并具有以下形式:
如果operator接受单个参数,则可以省略指定参数列表的外部数组:
为了避免在参数是文字数组的情况下解析歧义,必须将文字数组包装在$literal
表达式中,或者保留指定参数列表的外部数组。
算术表达式对数字执行数学运算。一些算术表达式也可以支持日期算术。
名称 | 描述 |
---|---|
$abs |
返回数字的绝对值。 |
$add |
添加数字以返回总和,或者添加数字和日期以返回新日期。如果添加数字和日期,则将数字视为毫秒。接受任意数量的参数表达式,但最多只能一个表达式解析为日期。 |
$ceil |
返回大于或等于指定数字的最小整数。 |
$divide |
返回第一个数字除以第二个数字的结果。接受两个参数表达式。 |
$exp |
将e提高到指定的指数。 |
$floor |
返回小于或等于指定数字的最大整数。 |
$ln |
计算数字的自然对数。 |
$log |
以指定的底数计算数字的对数。 |
$log10 |
计算数字的以10为底的对数。 |
$mod |
返回第一个数字的余数除以第二个数字。接受两个参数表达式。 |
$multiply |
乘以数字可返回乘积。接受任意数量的参数表达式。 |
$pow |
将数字提高到指定的指数。 |
$round |
将数字四舍五入为整数或指定的小数位。 |
$sqrt |
计算平方根。 |
$subtract |
返回从第一个值减去第二个值的结果。如果两个值是数字,则返回差值。如果两个值是日期,则返回以毫秒为单位的差。如果两个值是日期和毫秒数,则返回结果日期。接受两个参数表达式。如果两个值是日期和数字,请首先指定date参数,因为从数字中减去日期没有意义。 |
$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
返回一个数字。
比较表达式采用两个参数表达式,并且对不同类型的值使用指定的BSON比较顺序来比较值和类型。
$cmp |
返回0 如果这两个值是相等的,1 如果第一个值大于所述第二值,并且-1 如果所述第一值大于所述第二以下。 |
---|---|
$eq |
true 如果值相等则返回。 |
$gt |
true 如果第一个值大于第二个值,则返回。 |
$gte |
true 如果第一个值大于或等于第二个值,则返回。 |
$lt |
true 如果第一个值小于第二个值,则返回。 |
$lte |
返回true 如果第一个值小于或等于第二。 |
$ne |
true 如果值不相等,则返回。 |
名称 | 描述 |
---|---|
$cond |
一个三元运算符,它对一个表达式求值,并根据结果返回其他两个表达式之一的值。接受有序列表中的三个表达式或三个命名参数。 |
$ifNull |
如果第一个表达式的结果为空,则返回第一个表达式的非空结果或第二个表达式的结果。空结果包含未定义值或缺少字段的实例。接受两个表达式作为参数。第二个表达式的结果可以为空。 |
$switch |
计算一系列案例表达式。当它找到一个计算结果为的表达式时true ,$switch 执行一个指定的表达式并退出控制流程。 |
以下运算符返回日期对象或日期对象的组成部分:
名称 | 描述 |
---|---|
$dateFromParts |
给定日期的组成部分,构造一个BSON Date对象。 |
$dateFromString |
将日期/时间字符串转换为日期对象。 |
$dateToParts |
返回包含日期组成部分的文档。 |
$dateToString |
以格式字符串返回日期。 |
$dayOfMonth |
以1到31之间的数字返回日期的月份。 |
$dayOfWeek |
以1(星期日)至7(星期六)之间的数字返回日期的星期几。 |
$dayOfYear |
以1到366(le年)之间的数字返回日期中的日期。 |
$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(一月)至12(十二月)之间的数字返回日期的月份。 |
$second |
以0到60之间的数字返回日期的秒数((秒)。 |
$toDate |
将值转换为日期。 版本4.0中的新功能。 |
$week |
返回日期的星期数,其范围是0(该年的第一个星期日之前的局部星期)和53(le年)之间的数字。 |
$year |
以数字形式返回日期的年份(例如2014)。 |
以下算术运算符可以采用日期操作数:
名称 | 描述 |
---|---|
$add |
添加数字和日期以返回新日期。如果添加数字和日期,则将数字视为毫秒。接受任意数量的参数表达式,但最多只能一个表达式解析为日期。 |
$subtract |
返回从第一个值减去第二个值的结果。如果两个值是日期,则返回以毫秒为单位的差。如果两个值是日期和毫秒数,则返回结果日期。接受两个参数表达式。如果两个值是日期和数字,请首先指定date参数,因为从数字中减去日期没有意义。 |
名称 | 描述 |
---|---|
$mergeObjects |
将多个文档合并为一个文档。 3.6版的新功能。 |
$objectToArray |
将文档转换为代表键值对的文档数组。 3.6版的新功能。 |
集表达式对数组执行集运算,将数组视为集。集合表达式将忽略每个输入数组中的重复条目以及元素的顺序。
如果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中的新功能。 |
$regexFind |
将正则表达式(regex)应用于字符串,并返回第一个匹配的子字符串的信息。 4.2版中的新功能。 |
$regexFindAll |
将正则表达式(regex)应用于字符串,并返回所有匹配的子字符串的信息。 4.2版中的新功能。 |
$regexMatch |
将正则表达式(regex)应用于字符串,并返回一个布尔值,该布尔值指示是否找到匹配项。 4.2版中的新功能。 |
$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 |
将字符串转换为大写。接受单个参数表达式。 |
三角表达式对数字执行三角运算。表示角度的值始终以弧度为单位输入或输出。使用
$degreesToRadians
和$radiansToDegrees
在度和弧度测量之间转换。
名称 | 描述 |
---|---|
$sin |
返回以弧度为单位的值的正弦值。 |
$cos |
返回以弧度为单位的值的余弦值。 |
$tan |
返回以弧度为单位的值的切线。 |
$asin |
返回弧度值的反正弦(弧正弦)。 |
$acos |
返回以弧度为单位的值的反余弦(弧余弦)。 |
$atan |
返回弧度值的反正切(弧切线)。 |
$atan2 |
返回弧度的反正切(弧切线),其中和是分别传递给表达式的第一个和第二个值。y / x y x |
$asinh |
返回弧度值的反双曲正弦(双曲反正弦)。 |
$acosh |
返回弧度值的反双曲余弦(双曲反余弦)。 |
$atanh |
返回弧度值的反双曲正切(双曲反正切)。 |
$degreesToRadians |
将值从度转换为弧度。 |
$radiansToDegrees |
将值从弧度转换为度。 |
名称 | 描述 |
---|---|
$convert |
将值转换为指定的类型。 版本4.0中的新功能。 |
$toBool |
将值转换为布尔值。 版本4.0中的新功能。 |
$toDate |
将值转换为日期。 版本4.0中的新功能。 |
$toDecimal |
将值转换为Decimal128。 版本4.0中的新功能。 |
$toDouble |
将值转换为双精度。 版本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 |
返回数值的总和。忽略非数字值。 |