聚合操作分为两种
1.db.collection.aggregate()
阶段 | 描述 |
---|---|
$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是数组元素的数量,对于空数组,可以为零。 |
2.db.aggregate()
db.aggregate()
阶段
从3.6版开始,MongoDB还提供了以下 db.aggregate
方法:
以下阶段使用db.aggregate()
方法而不是db.collection.aggregate()
方法。
阶段 | 描述 |
---|---|
$currentOp |
返回有关MongoDB部署的活动和/或休眠操作的信息。 |
$listLocalSessions |
列出最近在当前连接mongos 或mongod 实例上使用的所有活动会话。这些会话可能尚未传播到system.sessions 集合中。 |
按字母顺序排列的阶段列表
名称 | 描述 |
---|---|
$addFields |
向文档添加新字段。输出包含输入文档和新添加字段中所有现有字段的文档。 |
$bucket |
根据指定的表达式和存储区边界,将传入的文档分组,称为存储桶。 |
$bucketAuto |
根据指定的表达式将传入的文档分类为特定数量的组(称为存储桶)。自动确定存储桶边界,以尝试将文档均匀地分配到指定数量的存储桶中。 |
$collStats |
返回有关集合或视图的统计信息。 |
$count |
返回聚合管道此阶段的文档数量计数。 |
$currentOp |
返回有关MongoDB部署的活动和/或休眠操作的信息。要运行,请使用该db.aggregate() 方法。 |
$facet |
在同一组输入文档的单个阶段内处理多个聚合管道。支持创建能够在单个阶段中跨多个维度或方面表征数据的多面聚合。 |
$geoNear |
基于与地理空间点的接近度返回有序的文档流。集成的功能 $match ,$sort 以及$limit 地理空间数据。输出文档包括附加距离字段,并且可以包括位置标识符字段。 |
$graphLookup |
对集合执行递归搜索。对于每个输出文档,添加一个新的数组字段,其中包含该文档的递归搜索的遍历结果。 |
$group |
按指定的标识符表达式对文档进行分组,并将累加器表达式(如果已指定)应用于每个组。消耗所有输入文档,并为每个不同的组输出一个文档。输出文档仅包含标识符字段,如果指定,则包含累积字段。 |
$indexStats |
返回有关集合的每个索引的使用的统计信息。 |
$limit |
将未修改的前n个文档传递给管道,其中n是指定的限制。对于每个输入文档,输出一个文档(对于前n个文档)或零文档(在前n个文档之后)。 |
$listLocalSessions |
列出最近在当前连接mongos 或mongod 实例上使用的所有活动会话 。这些会话可能尚未传播到system.sessions 集合中。 |
$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是数组元素的数量,对于空数组,可以为零。 |