聚合管道阶段

db.collection.aggregate方法和db.aggregate方法中,管道阶段出现在 array 中。文档按顺序通过各个阶段。

阶段

db.collection.aggregate()阶段

除和$geoNear阶段之外的所有阶段都可以在管道中多次出现。

注意 有关特定 operator 的详细信息,包括语法和示例,请单击特定的 operator 以转到其 reference 页面。

db.collection.aggregate( [ { <stage> }, ... ] )
阶段描述
$addFields向文档添加新字段。与$project类似,$addFields重塑了流中的每个文档;具体而言,通过向输出文档添加新字段,该文档包含输入文档和新添加字段中的现有字段。
$bucket根据指定的表达式和存储区边界,将传入的文档分组,称为存储桶。
$bucketAuto根据指定的表达式将传入的文档分类为特定数量的组(称为存储桶)。自动确定存储桶边界,以尝试将文档均匀地分配到指定数量的存储桶中。
$collStats返回有关集合或视图的统计信息。
$count返回聚合管道此阶段的文档数量计数。
$facet在同一组输入文档的单个阶段内处理多个聚合管道。允许创建能够在单个阶段中跨多个维度或方面表征数据的 multi-faceted 聚合。
$geoNear基于与地理空间点的接近度返回有序的文档流。将$match$sort$limit的功能合并到地理空间数据中。输出文档包括附加距离字段,并且可以包括位置标识符字段。
$graphLookup对集合执行递归搜索。对于每个输出文档,添加一个新的 array 字段,该字段包含该文档的递归搜索的遍历结果。
$group按指定的标识符表达式对文档进行分组,并将累加器 expression(s(如果指定)应用于每个 group。消耗所有输入文档,并为每个不同的 group 输出一个文档。输出文档仅包含标识符字段,如果指定,则包含累积字段。
$indexStats返回有关集合的每个索引的使用的统计信息。
$limit将未修改的前 n 个文档传递给管道,其中 n 是指定的限制。对于每个输入文档,输出一个文档(对于前 n 个文档)或零文档(在前 n 个文档之后)。
$listSessions列出足以传播到system.sessions集合的所有会话。
$lookup对同一数据库中的另一个集合执行左外连接,以从“已连接”集合中过滤文档以进行处理。
$match过滤文档流以仅允许匹配的文档未经修改地传递到下一个管道阶段。 $match使用标准的 MongoDB 查询。对于每个输入文档,输出一个文档(match)或零文档(无 match)。
$out将聚合管道的结果文档写入集合。要使用$out阶段,它必须是管道中的最后一个阶段。
$project重新整形流中的每个文档,例如添加新字段或删除现有字段。对于每个输入文档,输出一个文档。
$redact通过基于文档本身中存储的信息限制每个文档的内容来重塑流中的每个文档。包含$project$match的功能。可用于实现字段 level 编辑。对于每个输入文档,输出一个或零个文档。
$replaceRoot用指定的嵌入文档替换文档。该操作将替换输入文档中的所有现有字段,包括_id字段。指定嵌入在输入文档中的文档,以将嵌入的文档提升到顶部 level。
$sample从输入中随机选择指定数量的文档。
$skip跳过前 n 个文档,其中 n 是指定的跳过编号,并将未修改的其余文档传递给管道。对于每个输入文档,输出零文档(对于前 n 个文档)或一个文档(如果在前 n 个文档之后)。
$sort按指定的排序 key 重新排序文档流。只有 order 改变;文件保持不变。对于每个输入文档,输出一个文档。
$sortByCount根据指定表达式的 value 对传入文档进行分组,然后计算每个不同 group 中的文档计数。
$unwind从输入文档解构 array 字段以输出每个元素的文档。每个输出文档都使用元素 value 替换 array。对于每个输入文档,输出 n 个文档,其中 n 是 array 元素的数量,对于空 array 可以为零。

对于要在管道阶段使用的聚合表达式 operators,请参阅聚合管道操作员

db.aggregate()阶段

从 version 3.6 开始,MongoDB 还提供了db.aggregate方法:

db.aggregate( [ { <stage> }, ... ] )

以下阶段使用db.aggregate()方法而不是db.collection.aggregate()方法。

阶段描述
$currentOp返回有关 MongoDB 部署的 active and/or 休眠操作的信息。
$listLocalSessions列出最近在当前连接的mongosmongod实例上使用的所有 active 会话。这些会话可能尚未传播到system.sessions集合。

按字母顺序排列的阶段列表

名称描述
$addFields向文档添加新字段。输出包含输入文档和新添加字段中所有现有字段的文档。
$bucket根据指定的表达式和存储区边界,将传入的文档分组,称为存储桶。
$bucketAuto根据指定的表达式将传入的文档分类为特定数量的组(称为存储桶)。自动确定存储桶边界,以尝试将文档均匀地分配到指定数量的存储桶中。
$collStats返回有关集合或视图的统计信息。
$count返回聚合管道此阶段的文档数量计数。
$currentOp返回有关 MongoDB 部署的 active and/or 休眠操作的信息。要 run,请使用db.aggregate()方法。
$facet在同一组输入文档的单个阶段内处理多个聚合管道。允许创建能够在单个阶段中跨多个维度或方面表征数据的 multi-faceted 聚合。
$geoNear基于与地理空间点的接近度返回有序的文档流。将$match$sort$limit的功能合并到地理空间数据中。输出文档包括附加距离字段,并且可以包括位置标识符字段。
$graphLookup对集合执行递归搜索。对于每个输出文档,添加一个新的 array 字段,该字段包含该文档的递归搜索的遍历结果。
$group按指定的标识符表达式对文档进行分组,并将累加器 expression(s(如果指定)应用于每个 group。消耗所有输入文档,并为每个不同的 group 输出一个文档。输出文档仅包含标识符字段,如果指定,则包含累积字段。
$indexStats返回有关集合的每个索引的使用的统计信息。
$limit将未修改的前 n 个文档传递给管道,其中 n 是指定的限制。对于每个输入文档,输出一个文档(对于前 n 个文档)或零文档(在前 n 个文档之后)。
$listLocalSessions列出最近在当前连接的mongosmongod实例上使用的所有 active 会话。这些会话可能尚未传播到system.sessions集合。
$listSessions列出足以传播到system.sessions集合的所有会话。
$lookup对同一数据库中的另一个集合执行左外连接,以从“已连接”集合中过滤文档以进行处理。
$match过滤文档流以仅允许匹配的文档未经修改地传递到下一个管道阶段。 $match使用标准的 MongoDB 查询。对于每个输入文档,输出一个文档(match)或零文档(无 match)。
$out将聚合管道的结果文档写入集合。要使用$out阶段,它必须是管道中的最后一个阶段。
$project重新整形流中的每个文档,例如添加新字段或删除现有字段。对于每个输入文档,输出一个文档。
$redact通过基于文档本身中存储的信息限制每个文档的内容来重塑流中的每个文档。包含$project$match的功能。可用于实现字段 level 编辑。对于每个输入文档,输出一个或零个文档。
$replaceRoot用指定的嵌入文档替换文档。该操作将替换输入文档中的所有现有字段,包括_id字段。指定嵌入在输入文档中的文档,以将嵌入的文档提升到顶部 level。
$sample从输入中随机选择指定数量的文档。
$skip跳过前 n 个文档,其中 n 是指定的跳过编号,并将未修改的其余文档传递给管道。对于每个输入文档,输出零文档(对于前 n 个文档)或一个文档(如果在前 n 个文档之后)。
$sort按指定的排序 key 重新排序文档流。只有 order 改变;文件保持不变。对于每个输入文档,输出一个文档。
$sortByCount根据指定表达式的 value 对传入文档进行分组,然后计算每个不同 group 中的文档计数。
$unwind从输入文档解构 array 字段以输出每个元素的文档。每个输出文档都使用元素 value 替换 array。对于每个输入文档,输出 n 个文档,其中 n 是 array 元素的数量,对于空 array 可以为零。