1-MongoDB - 数据类型和运算符
before
mongodb3.6.12
为了更好的学习MongoDB的CURD操作,这里先学习MongoDB中的常用运算符和常用的数据类型。
数据类型
Type | 描述 |
---|---|
ObjectID | 用于存储文档的ID,相当于主键 |
String | 字符串是最常用的数据类型,MongoDB中的字符串必须是UTF-8编码 |
Symbol | 与字符串用法相同,常用于某些使用特殊符号的语言 |
Integer | 整数类型用于存储数值,整数可以是32位,也可以是64位,这取决于你的系统 |
Double | MongoDB将所有浮点类型的数据以双精度类型进行存储 |
Boolean | 布尔类型用于存储布尔值(小写的true和false) |
Arrays | 将数组、列表或多个值存储到一个键 |
Timestamp | 时间戳时间,用于记录文档何时被修改或创建 |
Object | 用于嵌入文档中,相当于嵌套结构是另一个json |
Null | 空值,相当于Python中的None |
Binary data | 二进制数据 |
Code | 用于将JavaScript代码存储到文档中 |
Regular expression | 正则表达式 |
Operator
在MongoDB的CURD中,运算符无处不在,这里将列出常用的运算符,便于查找。
以下整理自MongoDB3.6版本的官档手册:https://docs.mongodb.com/v3.6/reference/operator/
查询和投影运算符
比较查询运算符
https://docs.mongodb.com/manual/reference/operator/query/#comparison
名称 | 描述 |
---|---|
$eq |
匹配等于指定值的值。 |
$gt |
匹配大于指定值的值。 |
$gte |
匹配大于或等于指定值的值。 |
$in |
匹配数组中指定的任何值。 |
$lt |
匹配小于指定值的值。 |
$lte |
匹配小于或等于指定值的值。 |
$ne |
匹配所有不等于指定值的值。 |
$nin |
不匹配数组中指定的任何值。 |
逻辑查询运算符
https://docs.mongodb.com/manual/reference/operator/query/#logical
名称 | 描述 |
---|---|
$and |
用逻辑联接查询子句AND 返回与两个子句条件都匹配的所有文档。 |
$not |
反转查询表达式的效果,并返回与查询表达式不匹配的文档。 |
$nor |
用逻辑联接查询子句NOR 将返回两个子句均不匹配的所有文档。 |
$or |
用逻辑联接查询子句OR 将返回符合任一子句条件的所有文档。 |
元素查询运算符
https://docs.mongodb.com/manual/reference/operator/query/#element
名称 | 描述 |
---|---|
$exists |
匹配具有指定字段的文档。 |
$type |
如果字段是指定类型,则选择文档。 |
评估查询运算符
https://docs.mongodb.com/manual/reference/operator/query/#evaluation
名称 | 描述 |
---|---|
$expr |
允许在查询语言中使用聚合表达式。 |
$jsonSchema |
根据给定的JSON Schema验证文档。 |
$mod |
对字段的值执行模运算,并选择具有指定结果的文档。 |
$regex |
选择值与指定的正则表达式匹配的文档。 |
$text |
执行文本搜索。 |
$where |
匹配满足JavaScript表达式的文档。 |
地理空间查询运算符
https://docs.mongodb.com/manual/reference/operator/query/#geospatial
名称 | 描述 |
---|---|
$geoIntersects |
选择与GeoJSON几何相交的几何。该2dsphere索引支持 $geoIntersects 。 |
$geoWithin |
选择边界GeoJSON几何内的几何。该2dsphere和2D指标支持 $geoWithin 。 |
$near |
返回点附近的地理空间对象。需要地理空间索引。该2dsphere和2D指标支持 $near 。 |
$nearSphere |
返回球体上某个点附近的地理空间对象。需要地理空间索引。该2dsphere和2D指标支持 $nearSphere 。 |
数组查询运算符
https://docs.mongodb.com/manual/reference/operator/query/#array
名称 | 描述 |
---|---|
$all |
匹配包含查询中指定的所有元素的数组。 |
$elemMatch |
如果array字段中的元素符合所有指定$elemMatch 条件,则选择文档。 |
$size |
如果数组字段为指定大小,则选择文档。 |
按位查询运算符
https://docs.mongodb.com/v3.6/reference/operator/query/#bitwise
名称 | 描述 |
---|---|
$bitsAllClear |
匹配其中一组位位置的数值或二进制值都具有值0 。 |
$bitsAllSet |
匹配其中一组位位置的数值或二进制值都具有值1 。 |
$bitsAnyClear |
匹配数字或二进制值,其中一组位位置中的任何位的值为0 。 |
$bitsAnySet |
匹配数字或二进制值,其中一组位位置中的任何位的值为1 。 |
评论
https://docs.mongodb.com/v3.6/reference/operator/query/#comments
名称 | 描述 |
---|---|
$comment |
向查询谓词添加注释。 |
投影运算符
https://docs.mongodb.com/v3.6/reference/operator/query/#projection-operators
名称 | 描述 |
---|---|
$ |
在与查询条件匹配的数组中投影第一个元素。 |
$elemMatch |
投影与指定$elemMatch 条件匹配的数组中的第一个元素。 |
$meta |
投影$text 操作期间分配的文档分数。 |
$slice |
限制从数组投影的元素数量。支持跳过和限制切片。 |
更新运算符
字段更新运算符
https://docs.mongodb.com/v3.6/reference/operator/update-field/#field-update-operators
名称 | 描述 |
---|---|
$currentDate |
将字段的值设置为当前日期(日期或时间戳)。 |
$inc |
将字段的值增加指定的数量。 |
$min |
仅当指定值小于现有字段值时才更新该字段。 |
$max |
仅当指定值大于现有字段值时才更新该字段。 |
$mul |
将字段的值乘以指定的数量。 |
$rename |
重命名字段。 |
$set |
设置文档中字段的值。 |
$setOnInsert |
如果更新导致插入文档,则设置字段的值。对修改现有文档的更新操作没有影响。 |
$unset |
从文档中删除指定的字段。 |
数组更新运算符
https://docs.mongodb.com/v3.6/reference/operator/update-array/#array-update-operators
名称 | 描述 |
---|---|
$ |
充当占位符,以更新与查询条件匹配的第一个元素。 |
$[] |
充当占位符,以更新匹配查询条件的文档的数组中的所有元素。 |
$[<identifier>] |
充当占位符,以更新arrayFilters 与查询条件匹配的文档中所有与条件匹配的元素。 |
$addToSet |
仅当元素不存在于集合中时才将它们添加到数组中。 |
$pop |
删除数组的第一项或最后一项。 |
$pull |
删除与指定查询匹配的所有数组元素。 |
$push |
将项目添加到数组。 |
$pullAll |
从数组中删除所有匹配的值。 |
$each |
修改$push 和$addToSet 运算符以附加多个项以进行数组更新。 |
$position |
修改$push 运算符以指定要添加元素的数组中的位置。 |
$slice |
修改$push 运算符以限制更新数组的大小。 |
$sort |
修改$push 运算符以对存储在数组中的文档重新排序。 |
按位运算符
https://docs.mongodb.com/v3.6/reference/operator/update-bitwise/#bitwise-update-operator
名称 | 描述 |
---|---|
$bit |
执行按位AND ,OR 和XOR 更新整数值。 |
聚合运算符
聚合流水线阶段
https://docs.mongodb.com/v3.6/reference/operator/aggregation-pipeline/#aggregation-pipeline-stages
名称 | 描述 |
---|---|
$addFields |
将新字段添加到文档。与相似 $project ,$addFields 重塑流中的每个文档;具体而言,通过向输出文档添加新字段,该输出文档既包含输入文档中的现有字段,又包含新添加的字段。 |
$bucket |
根据指定的表达式和存储区边界将传入文档分类为称为存储区的组。 |
$bucketAuto |
根据指定的表达式将传入文档分类为特定数量的组,称为存储桶。自动确定存储区边界,以尝试将文档平均分配到指定数量的存储区中。 |
$collStats |
返回有关集合或视图的统计信息。 |
$count |
返回聚合管道此阶段的文档数计数。 |
$facet |
在同一阶段的同一组输入文档上处理多个聚合管道。支持在一个阶段中创建能够表征多维或多面数据的多面聚合。 |
$geoNear |
根据与地理空间点的接近程度返回有序的文档流。包含 $match ,$sort 和$limit 用于地理空间数据的功能。输出文档包括附加距离字段,并且可以包括位置标识符字段。 |
$graphLookup |
对集合执行递归搜索。在每个输出文档中,添加一个新的数组字段,其中包含对该文档的递归搜索的遍历结果。 |
$group |
按指定的标识符表达式对输入文档进行分组,并将累加器表达式(如果指定)应用于每个组。消耗所有输入文档,并在每个不同的组中输出一个文档。输出文档仅包含标识符字段,如果指定,还包含累积字段。 |
$indexStats |
返回有关集合中每个索引的使用情况的统计信息。 |
$limit |
将未修改的前n个文档传递到管道,其中n是指定的限制。对于每个输入文档,输出一个文档(对于前n个文档)或零文档(在前n个文档之后)。 |
$listSessions |
列出所有活动时间已经足够长以传播到system.sessions 集合的会话。 |
$lookup |
对同一数据库中的另一个集合执行左外部 联接,以过滤“联接”集合中的文档以进行处理。 |
$match |
筛选文档流,以仅允许匹配的文档未经修改地传递到下一个管道阶段。 $match 使用标准的MongoDB查询。对于每个输入文档,输出一个文档(匹配)或零文档(不匹配)。 |
$out |
将聚合管道的结果文档写入集合。要使用该$out 阶段,它必须是管道中的最后一个阶段。 |
$project |
重塑流中的每个文档,例如通过添加新字段或删除现有字段。对于每个输入文档,输出一个文档。 |
$redact |
通过基于文档本身中存储的信息限制每个文档的内容,来重塑流中的每个文档。包含$project 和的功能 $match 。可用于实施字段级修订。对于每个输入文档,输出一个或零个文档。 |
$replaceRoot |
用指定的嵌入式文档替换文档。该操作将替换输入文档中的所有现有字段,包括该_id 字段。指定嵌入在输入文档中的文档,以将嵌入的文档提升到顶层。 |
$sample |
从其输入中随机选择指定数量的文档。 |
$skip |
跳过前n个文档,其中n是指定的跳过编号,并将未修改的其余文档传递到管道。对于每个输入文档,输出零个文档(对于前n个文档)或一个文档(如果在前n个文档之后)。 |
$sort |
通过指定的排序键对文档流重新排序。只有顺序改变;这些文档保持不变。对于每个输入文档,输出一个文档。 |
$sortByCount |
根据指定表达式的值对传入文档进行分组,然后计算每个不同组中的文档数。 |
$unwind |
从输入文档中解构数组字段,以输出每个元素的文档。每个输出文档用一个元素值替换该数组。对于每个输入文档,输出n个文档,其中n是数组元素的数量,对于空数组可以为零。 |
$currentOp |
返回有关MongoDB部署的活动和/或休眠操作的信息。 |
$listLocalSessions |
列出当前在当前连接mongos 或mongod 实例上使用的所有活动会话。这些会话可能尚未传播到 system.sessions 集合。 |
聚合管道运算符
https://docs.mongodb.com/v3.6/reference/operator/aggregation/#aggregation-pipeline-operators
算术表达式运算符
https://docs.mongodb.com/v3.6/reference/operator/aggregation/#arithmetic-expression-operators
算术表达式对数字执行数学运算,一些算术表达式也可以支持日期算术。
名称 | 描述 |
---|---|
$abs |
返回数字的绝对值。 |
$add |
添加数字以返回总和,或者添加数字和日期以返回新日期。如果添加数字和日期,则将数字视为毫秒。接受任意数量的参数表达式,但最多只能一个表达式解析为日期。 |
$ceil |
返回大于或等于指定数字的最小整数。 |
$divide |
返回第一个数字除以第二个数字的结果。接受两个参数表达式。 |
$exp |
将e提高到指定的指数。 |
$floor |
返回小于或等于指定数字的最大整数。 |
$ln |
计算数字的自然对数。 |
$log |
以指定的底数计算数字的对数。 |
$log10 |
计算数字的以10为底的对数。 |
$mod |
返回第一个数字的余数除以第二个数字。接受两个参数表达式。 |
$multiply |
乘以数字可返回乘积。接受任意数量的参数表达式。 |
$pow |
将数字提高到指定的指数。 |
$sqrt |
计算平方根。 |
$subtract |
返回从第一个值减去第二个值的结果。如果两个值是数字,则返回差值。如果两个值是日期,则以毫秒为单位返回差值。如果两个值是日期和以毫秒为单位的数字,则返回结果日期。接受两个参数表达式。如果两个值是日期和数字,请首先指定date参数,因为从数字中减去日期没有意义。 |
$trunc |
将数字截断为其整数。 |
数组表达式运算符
https://docs.mongodb.com/v3.6/reference/operator/aggregation/#array-expression-operators
$arrayElemAt |
返回指定数组索引处的元素。 |
---|---|
$arrayToObject |
将键值对数组转换为文档。 |
$concatArrays |
连接数组以返回连接的数组。 |
$filter |
选择数组的子集以返回仅包含与过滤条件匹配的元素的数组。 |
$in |
返回一个布尔值,指示指定的值是否在数组中。 |
$indexOfArray |
在数组中搜索指定值的出现,并返回第一个出现的数组索引。如果未找到子字符串,则返回-1 。 |
$isArray |
确定操作数是否为数组。返回一个布尔值。 |
$map |
对数组的每个元素应用子表达式,并按顺序返回结果值的数组。接受命名参数。 |
$objectToArray |
将文档转换为代表键值对的文档数组。 |
$range |
根据用户定义的输入输出包含整数序列的数组。 |
$reduce |
将表达式应用于数组中的每个元素,并将它们组合为单个值。 |
$reverseArray |
返回具有相反顺序元素的数组。 |
$size |
返回数组中的元素数。接受单个表达式作为参数。 |
$slice |
返回数组的子集。 |
$zip |
将两个数组合并在一起。 |
布尔表达式运算符
https://docs.mongodb.com/v3.6/reference/operator/aggregation/#boolean-expression-operators
布尔表达式将其参数表达式评估为布尔值,并返回布尔值作为结果。
除了false
布尔值,布尔表达式为false
如下:null
,0
,和undefined
的值。布尔表达式将所有其他值评估为true
,包括非零数值和数组。
名称 | 描述 |
---|---|
$and |
true 仅当其所有表达式的计算结果 均为时返回true 。接受任意数量的参数表达式。 |
$not |
返回与其参数表达式相反的布尔值。接受单个参数表达式。 |
$or |
true 当其任何表达式的计算结果为时, 返回true 。接受任意数量的参数表达式。 |
比较表达式运算符
https://docs.mongodb.com/v3.6/reference/operator/aggregation/#comparison-expression-operators
比较表达式返回一个布尔值,但$cmp
返回一个数字。
比较表达式采用两个参数表达式,并针对不同类型的值使用指定的BSON比较顺序来比较值和类型。
名称 | 描述 |
---|---|
$cmp |
返回0 如果这两个值是相等的,1 如果第一个值大于所述第二值,并且-1 如果所述第一值大于所述第二以下。 |
$eq |
true 如果值相等则返回。 |
$gt |
true 如果第一个值大于第二个值,则返回。 |
$gte |
返回true 如果第一个值大于或等于第二个。 |
$lt |
true 如果第一个值小于第二个值,则返回。 |
$lte |
返回true 如果第一个值小于或等于第二。 |
$ne |
true 如果值不相等,则返回。 |
条件表达式运算符
https://docs.mongodb.com/v3.6/reference/operator/aggregation/#conditional-expression-operators
名称 | 描述 |
---|---|
$cond |
一个三元运算符,它对一个表达式求值,并根据结果返回其他两个表达式之一的值。接受有序列表中的三个表达式或三个命名参数。 |
$ifNull |
如果第一个表达式的结果为空,则返回第一个表达式的非空结果或第二个表达式的结果。空结果包含未定义值或缺少字段的实例。接受两个表达式作为参数。第二个表达式的结果可以为空。 |
$switch |
计算一系列案例表达式。当它找到一个计算结果为的表达式时true ,$switch 执行一个指定的表达式并退出控制流程。 |
日期表达式运算符
https://docs.mongodb.com/v3.6/reference/operator/aggregation/#date-expression-operators
以下运算符返回日期对象或日期对象的组成部分:
名称 | 描述 |
---|---|
$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之间的数字(le秒)返回日期的秒数。 |
$week |
返回日期的星期数,其范围为0(该年的第一个星期日之前的局部星期)和53(le年)之间的数字。 |
$year |
以数字形式返回日期的年份(例如2014)。 |
以下算术运算符可以采用日期操作数:
名称 | 描述 |
---|---|
$add |
添加数字和日期以返回新日期。如果添加数字和日期,则将数字视为毫秒。接受任意数量的参数表达式,但最多只能一个表达式解析为日期。 |
$subtract |
返回从第一个值减去第二个值的结果。如果两个值是日期,则以毫秒为单位返回差值。如果两个值是日期和以毫秒为单位的数字,则返回结果日期。接受两个参数表达式。如果两个值是日期和数字,请首先指定date参数,因为从数字中减去日期没有意义。 |
文字表达式运算符
https://docs.mongodb.com/v3.6/reference/operator/aggregation/#literal-expression-operator
名称 | 描述 |
---|---|
$literal |
返回不解析的值。用于聚合管道可以解释为表达式的值。例如,$literal 对以a开头的字符串使用表达式,$ 以避免将其解析为字段路径。 |
对象表达式运算符
https://docs.mongodb.com/v3.6/reference/operator/aggregation/#object-expression-operators
名称 | 描述 |
---|---|
$mergeObjects |
将多个文档合并为一个文档。3.6版的新功能。 |
$objectToArray |
将文档转换为代表键值对的文档数组。3.6版的新功能。 |
集合表达式运算符
https://docs.mongodb.com/v3.6/reference/operator/aggregation/#set-expression-operators
集合表达式对数组执行集运算,将数组视为集合。集合表达式忽略每个输入数组中的重复条目以及元素的顺序。
如果set操作返回一个set,则该操作会滤除结果中的重复项,以输出仅包含唯一条目的数组。输出数组中元素的顺序未指定。
如果一组包含嵌套数组元素,该组表达并没有下降到嵌套阵列,但在评估顶层阵列。
名称 | 描述 |
---|---|
$allElementsTrue |
返回true 如果没有一套评价了元素 false ,否则,返回false 。接受单个参数表达式。 |
$anyElementTrue |
true 如果集合中的任何元素 求和,则返回true ;否则,返回false 。接受单个参数表达式。 |
$setDifference |
返回具有出现在第一个集合中但不出现在第二个集合中的元素的集合;即执行 第二组相对于第一组的相对补码。正好接受两个参数表达式。 |
$setEquals |
返回true 如果输入组具有相同的不同元素。接受两个或多个参数表达式。 |
$setIntersection |
返回具有出现在所有输入集中的元素的集合。接受任意数量的参数表达式。 |
$setIsSubset |
返回true 第一个集合的所有元素是否出现在第二个集合中,包括第一个集合等于第二个集合时;即不是严格的子集。正好接受两个参数表达式。 |
$setUnion |
返回带有出现在任何输入集中的元素的集合。 |
字符串表达式运算符
https://docs.mongodb.com/v3.6/reference/operator/aggregation/#string-expression-operators
字符串表达式(除外 $concat
)仅对ASCII字符字符串具有明确定义的行为。
$concat
行为是明确定义的,与所使用的字符无关。
名称 | 描述 |
---|---|
$concat |
连接任意数量的字符串。 |
$dateFromString |
将日期/时间字符串转换为日期对象。 |
$dateToString |
以格式字符串返回日期。 |
$indexOfBytes |
在字符串中搜索子字符串的出现,并返回第一次出现的UTF-8字节索引。如果未找到子字符串,则返回-1 。 |
$indexOfCP |
在字符串中搜索子字符串的出现,并返回第一次出现的UTF-8代码点索引。如果未找到子字符串,则返回-1 |
$split |
根据定界符将字符串拆分为子字符串。返回子字符串数组。如果在字符串中未找到分隔符,则返回包含原始字符串的数组。 |
$strLenBytes |
返回字符串中UTF-8编码的字节数。 |
$strLenCP |
返回字符串中UTF-8代码点的数量。 |
$strcasecmp |
执行不区分大小写的字符串比较并返回: 0 如果两个字符串相等,1 则第一个字符串大于第二个-1 字符串,并且第一个字符串小于第二个字符串。 |
$substr |
不推荐使用。使用$substrBytes 或 $substrCP 。 |
$substrBytes |
返回字符串的子字符串。从字符串中指定的UTF-8字节索引(从零开始)处的字符开始,并继续指定的字节数。 |
$substrCP |
返回字符串的子字符串。从字符串中指定的UTF-8代码点(CP)索引(从零开始)处的字符开始,并继续指定的代码点数。 |
$toLower |
将字符串转换为小写。接受单个参数表达式。 |
$toUpper |
将字符串转换为大写。接受单个参数表达式。 |
文本表达式运算符
https://docs.mongodb.com/v3.6/reference/operator/aggregation/#text-expression-operator
名称 | 描述 |
---|---|
$meta |
访问文本搜索元数据。 |
类型表达式运算符
https://docs.mongodb.com/v3.6/reference/operator/aggregation/#type-expression-operators
名称 | 描述 |
---|---|
$type |
返回该字段的BSON数据类型。 |
累加器($group
)
https://docs.mongodb.com/v3.6/reference/operator/aggregation/#accumulators-group
$group
累加器是可以在该阶段中使用的运算符,它们在文档通过管道进行过程时保持其状态(例如,总计,最大值,最小值和相关数据)。
当在$group
阶段中用作累加器时,这些运算符将单个表达式作为输入,对每个输入文档评估一次该表达式,并为共享相同组键的文档组维护其阶段。
名称 | 描述 |
---|---|
$addToSet |
返回每个组的唯一表达式值的数组。数组元素的顺序未定义。 |
$avg |
返回数值的平均值。忽略非数字值。 |
$first |
为每个组从第一个文档返回一个值。仅当文档按定义的顺序定义顺序。 |
$last |
从每个组的最后一个文档返回一个值。仅当文档按定义的顺序定义顺序。 |
$max |
返回每个组的最高表达式值。 |
$mergeObjects |
返回通过组合每个组的输入文档而创建的文档。 |
$min |
返回每个组的最低表达式值。 |
$push |
返回每个组的表达式值的数组。 |
$stdDevPop |
返回输入值的总体标准偏差。 |
$stdDevSamp |
返回输入值的样本标准偏差。 |
$sum |
返回数值的总和。忽略非数字值。 |
累加器($project
)
https://docs.mongodb.com/v3.6/reference/operator/aggregation/#accumulators-project
在$group
阶段可以作为累加器使用的一些操作符也可以在$project
阶段使用,但不能作为累加器使用。在$project阶段使用时,这些操作符不维护它们的状态,可以接受单个参数或多个参数作为输入。
在3.2版更改。
以下累加器操作符也可以在$project
和$addFields
阶段中使用。
名称 | 描述 |
---|---|
$avg |
返回每个文档的指定表达式或表达式列表的平均值。忽略非数字值。 |
$max |
返回每个文档的指定表达式或表达式列表的最大值 |
$min |
返回每个文档的指定表达式或表达式列表的最小值 |
$stdDevPop |
返回输入值的总体标准偏差。 |
$stdDevSamp |
返回输入值的样本标准偏差。 |
$sum |
返回数值的总和。忽略非数字值。 |
变量表达式运算符
https://docs.mongodb.com/v3.6/reference/operator/aggregation/#variable-expression-operators
名称 | 描述 |
---|---|
$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 |
一个三元运算符,它对一个表达式求值,并根据结果返回其他两个表达式之一的值。接受有序列表中的三个表达式或三个命名参数。 |
$dateFromParts |
给定日期的组成部分,构造一个BSON Date对象。 |
$dateToParts |
返回包含日期组成部分的文档。 |
$dateFromString |
返回日期/时间作为日期对象。 |
$dateToString |
以格式字符串返回日期。 |
$dayOfMonth |
以1到31之间的数字返回日期的月份。 |
$dayOfWeek |
以1(星期日)至7(星期六)之间的数字返回日期的星期几。 |
$dayOfYear |
以1到366(le年)之间的数字返回日期的一年中的某天。 |
$divide |
返回第一个数字除以第二个数字的结果。接受两个参数表达式。 |
$eq |
true 如果值相等则返回。 |
$exp |
将e提高到指定的指数。 |
$filter |
选择数组的子集以返回仅包含与过滤条件匹配的元素的数组。 |
$first |
为每个组从第一个文档返回一个值。仅当文档按定义的顺序定义顺序。仅在$group 舞台上可用。 |
$floor |
返回小于或等于指定数字的最大整数。 |
$gt |
true 如果第一个值大于第二个值,则返回。 |
$gte |
返回true 如果第一个值大于或等于第二个。 |
$hour |
以0到23之间的数字返回日期的小时。 |
$ifNull |
如果第一个表达式的结果为空,则返回第一个表达式的非空结果或第二个表达式的结果。空结果包含未定义值或缺少字段的实例。接受两个表达式作为参数。第二个表达式的结果可以为空。 |
$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 如果第一个值小于或等于第二。 |
$map |
对数组的每个元素应用子表达式,并按顺序返回结果值的数组。接受命名参数。 |
$max |
返回每个组的最高表达式值。在版本3.2中更改:在$group 和$project 阶段均可用。 |
$mergeObjects |
将多个文档合并为一个文档。 |
$meta |
访问文本搜索元数据。 |
$min |
返回每个组的最低表达式值。在版本3.2中更改:在$group 和$project 阶段均可用。 |
$millisecond |
以0到999之间的数字返回日期的毫秒数。 |
$minute |
以0到59之间的数字返回日期的分钟。 |
$mod |
返回第一个数字的余数除以第二个数字。接受两个参数表达式。 |
$month |
以1(一月)至12(十二月)之间的数字返回日期的月份。 |
$multiply |
乘以数字可返回乘积。接受任意数量的参数表达式。 |
$ne |
true 如果值不 相等,则返回。 |
$not |
返回与其参数表达式相反的布尔值。接受单个参数表达式。 |
$objectToArray |
将文档转换为代表键值对的文档数组。 |
$or |
true 当其任何表达式的计算结果为时,返回true 。接受任意数量的参数表达式。 |
$pow |
将数字提高到指定的指数。 |
$push |
返回每个组的表达式值的数组。仅在$group 舞台上可用。 |
$range |
根据用户定义的输入输出包含整数序列的数组。 |
$reduce |
将表达式应用于数组中的每个元素,并将它们组合为单个值。 |
$reverseArray |
返回具有相反顺序元素的数组。 |
$second |
以0到60之间的数字(le秒)返回日期的秒数。 |
$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 |
返回从第一个值减去第二个值的结果。如果两个值是数字,则返回差值。如果两个值是日期,则以毫秒为单位返回差值。如果两个值是日期和以毫秒为单位的数字,则返回结果日期。接受两个参数表达式。如果两个值是日期和数字,请首先指定date参数,因为从数字中减去日期没有意义。 |
$sum |
返回数值的总和。忽略非数字值。在版本3.2中更改:在$group 和$project 阶段均可用。 |
$switch |
计算一系列案例表达式。当它找到一个计算结果为的表达式时true ,$switch 执行一个指定的表达式并退出控制流程。 |
$toLower |
将字符串转换为小写。接受单个参数表达式。 |
$toUpper |
将字符串转换为大写。接受单个参数表达式。 |
$trunc |
将数字截断为整数。 |
$type |
返回该字段的BSON数据类型。 |
$week |
返回日期的星期数,其范围是0(一年中的第一个星期日之前的局部星期)和53(le年)之间的数字。 |
$year |
以数字形式返回日期的年份(例如2014)。 |
$zip |
将两个数组合并在一起。 |
that's all,see also: