聚合管道阶段
在db.collection.aggregate()
方法和db.aggregate()
方法中, 管道 阶段出现在数组中。在 Atlas UI 中,您可以使用聚合管道构建器来安排管道阶段。文档按顺序通过各个阶段。
兼容性
您可以对如下环境中托管的部署使用管道阶段:
MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
阶段(Stages)
db.collection.aggregate()
阶段(Stages)
除 $out
、$merge
、$geoNear
、$changeStream
和 $changeStreamSplitLargeEvent
阶段之外的所有阶段都可以在管道中多次出现。
注意
有关特定操作符(包括事务语法和示例)的详细信息,请单击该操作符的参考页面链接。
db.collection.aggregate( [ { <stage> }, ... ] )
阶段 | 说明 |
---|---|
为文档添加新字段。与 | |
根据指定的表达式和存储桶边界将传入的文档分为多个组(称为存储桶)。 | |
根据指定的表达式,将接收到的文档归类到特定数量的群组中(称为“存储桶”)。自动确定存储桶边界,以尝试将文档均匀地分配到指定数量的存储桶中。 | |
返回集合的 Change Stream 游标。此阶段只能在 aggregation pipeline 中发生一次,并且必须作为第一阶段发生。 | |
将超过 16 MB 的大型 change stream 事件分割成较小的分段,在 change stream 游标中返回。 您只能在 | |
返回有关集合或视图的统计信息。 | |
返回聚合管道此阶段的文档数量计数。 有别于 | |
在文档序列中创建新文档,其中缺少字段中的某些值。 | |
从输入表达式返回字面文档。 | |
在单个阶段内处理同一组输入文档上的多个聚合管道。支持创建多分面聚合,能够在单个阶段中跨多个维度或分面描述数据特征。 | |
填充文档中的 | |
对集合执行递归搜索。为每个输出文档添加一个新数组字段,其中包含该文档的递归搜索遍历结果。 | |
按指定的标识符表达式对输入文档进行分组,并将累加器表达式(如果指定)应用于每个群组。接收所有输入文档,并为每个不同群组输出一个文档。输出文档仅包含标识符字段和累积字段(如果指定)。 | |
返回有关集合的每个索引使用情况的统计信息。 | |
将未修改的前 n 个文档传递到管道,其中 n 为指定的限制。对于每个输入文档,输出一个文档(针对前 n 个文档)或零个文档(前 n 个文档之后)。 | |
返回指定集合上现有 Atlas Search 索引的信息。 | |
列出活动时间足够长、足以传播到 system.sessions 集合的所有会话。 | |
对同一 数据库中的另一个集合执行左外连接,以过滤“已连接”集合中的文档以便进行处理。 | |
筛选文档流以仅允许匹配的文档将未修改的文档传入下一管道阶段。 $match 使用标准 MongoDB 查询。对于每个输入文档,输出一个文档(一个匹配项)或零个文档(无匹配项)。 | |
将 aggregation pipeline 的结果文档写入集合。该阶段可将结果(插入新文档、合并文档、替换文档、保留现有文档、操作失败、使用自定义更新管道处理文档)纳入输出集合。要使用 $merge 阶段,它必须是管道中的最后一个阶段。 | |
将 aggregation pipeline 的结果文档写入集合。要使用 $out 阶段,它必须是管道中的最后一个阶段。 | |
返回集合的计划缓存信息。 | |
重塑流中的每个文档,例如添加新的字段或删除现有字段。对于每个输入文档,输出一个文档。 另请参阅 | |
返回已记录查询的运行时统计信息。 警告:不支持 | |
用指定的嵌入文档替换文档。该操作会替换输入文档中的所有现有字段,包括
| |
用指定的嵌入文档替换文档。该操作会替换输入文档中的所有现有字段,包括
| |
从其输入中随机选择指定数量的文件。 | |
对 Atlas 集合中的一个或多个字段执行全文搜索。
| |
返回对 Atlas 集合进行 Atlas Search 查询时,得到的不同类型的元数据结果文档。
| |
为文档添加新字段。与
| |
将文档分组到窗口中,并将一个或多个操作符应用于每个窗口中的文档。 版本 5.0 中的新增功能。 | |
跳过前 n 个文档,其中 n 是指定的跳过编号,并将未修改的剩余文档传递到管道。对于每个输入文档,输出零个文档(对于前 n 个文档)或一个文档(如果在前 n 个文档之后)。 | |
按指定的排序键对文档流重新排序。仅顺序会改变,而文档则保持不变。对于每个输入文档,输出一个文档。 | |
根据指定表达式的值对传入文档进行分组,然后计算每个不同群组中的文档数量。 | |
执行两个集合的联合;即将两个集合的管道结果合并到一个结果集中。 | |
对输入文档中的某一数组字段进行解构,以便为每个元素输出文档。每个输出文档均会将此数组替换为元素值。对于每个输入文档,输出 n 个文档,其中 n 为数组元素的数量,且对于空数组可为零。 | |
对 Atlas 集合指定字段中的向量执行 近似最近邻 (ANN) 或精确最近邻 (ENN) 搜索。 版本 6.0.11 中的新增内容。 注意
版本 7.0.2 新增内容。 |
有关在管道阶段使用的聚合表达式操作符,请参阅聚合管道操作符。
db.aggregate()
阶段(Stages)
MongoDB 还提供了 db.aggregate()
方法:
db.aggregate( [ { <stage> }, ... ] )
以下阶段使用 db.aggregate()
方法,而不是 db.collection.aggregate()
方法。
阶段 | 说明 |
---|---|
返回集合的 Change Stream 游标。此阶段只能在 aggregation pipeline 中发生一次,并且必须作为第一阶段发生。 | |
返回 MongoDB 部署的活动和/或休眠操作的信息。 | |
根据输入值返回字面文档。 |
可更新的阶段
您可以使用聚合管道进行更新:
命令 | mongosh 方法 |
---|---|
对于更新,该管道可以由以下阶段组成:
$addFields
及其别名$set
按字母顺序列出的阶段
名称 | 说明 |
---|---|
向文档添加新字段。输出包含输入文档中所有现有字段和新添加字段的文档。 | |
根据指定的表达式和存储桶边界将传入的文档分为多个组(称为存储桶)。 | |
根据指定的表达式,将接收到的文档归类到特定数量的群组中(称为“存储桶”)。自动确定存储桶边界,以尝试将文档均匀地分配到指定数量的存储桶中。 | |
返回collection或数据库的change stream游标。此阶段只能在聚合管道中发生一次,并且必须作为第一阶段发生。 | |
将超过 16 MB 的大型 change stream 事件分割成较小的分段,在 change stream 游标中返回。 您只能在 | |
返回有关集合或视图的统计信息。 | |
返回聚合管道此阶段的文档数量计数。 有别于 | |
返回 MongoDB 部署的活动和/或休眠操作的信息。 要运行,请使用 db.aggregate() 方法。 | |
在文档序列中创建新文档,其中缺少字段中的某些值。 | |
根据输入值返回字面文档。 | |
在单个阶段内处理同一组输入文档上的多个聚合管道。支持创建多分面聚合,能够在单个阶段中跨多个维度或分面描述数据特征。 | |
填充文档中的 | |
对集合执行递归搜索。为每个输出文档添加一个新数组字段,其中包含该文档的递归搜索遍历结果。 | |
按指定的标识符表达式对输入文档进行分组,并将累加器表达式(如果指定)应用于每个群组。接收所有输入文档,并为每个不同群组输出一个文档。输出文档仅包含标识符字段和累积字段(如果指定)。 | |
返回有关集合的每个索引使用情况的统计信息。 | |
将未修改的前 n 个文档传递到管道,其中 n 为指定的限制。对于每个输入文档,输出一个文档(针对前 n 个文档)或零个文档(前 n 个文档之后)。 | |
返回指定集合上现有 Atlas Search 索引的信息。 | |
列出活动时间足够长、足以传播到 system.sessions 集合的所有会话。 | |
对同一 数据库中的另一个集合执行左外连接,以过滤“已连接”集合中的文档以便进行处理。 | |
筛选文档流以仅允许匹配的文档将未修改的文档传入下一管道阶段。 $match 使用标准 MongoDB 查询。对于每个输入文档,输出一个文档(一个匹配项)或零个文档(无匹配项)。 | |
将 aggregation pipeline 的结果文档写入集合。该阶段可将结果(插入新文档、合并文档、替换文档、保留现有文档、操作失败、使用自定义更新管道处理文档)纳入输出集合。要使用 4.2 版本中的新增功能。 | |
将 aggregation pipeline 的结果文档写入集合。要使用 $out 阶段,它必须是管道中的最后一个阶段。 | |
返回集合的计划缓存信息。 | |
重塑流中的每个文档,例如添加新的字段或删除现有字段。对于每个输入文档,输出一个文档。 | |
用指定的嵌入文档替换文档。该操作会替换输入文档中的所有现有字段,包括 _id 字段。指定嵌入在输入文档中的文档,以将嵌入的文档提升到顶层。 | |
用指定的嵌入文档替换文档。该操作会替换输入文档中的所有现有字段,包括 | |
从其输入中随机选择指定数量的文件。 | |
对 Atlas 集合中的一个或多个字段执行全文搜索。 注意
要了解更多信息,请参阅Atlas Search 聚合管道阶段。 | |
为针对 Atlas 集合的 Atlas Search 查询返回不同类型的 元数据结果 文档。 注意
要了解更多信息,请参阅Atlas Search 聚合管道阶段。 | |
向文档添加新字段。输出包含输入文档中所有现有字段和新添加字段的文档。 | |
将文档分组到窗口中,并将一个或多个操作符应用于每个窗口中的文档。 版本 5.0 中的新增功能。 | |
提供有关分片集合的数据和大小分布信息。 6.0.3 版本新增。 | |
跳过前 n 个文档,其中 n 是指定的跳过编号,并将未修改的剩余文档传递到管道。对于每个输入文档,输出零个文档(对于前 n 个文档)或一个文档(如果在前 n 个文档之后)。 | |
按指定的排序键对文档流重新排序。仅顺序会改变,而文档则保持不变。对于每个输入文档,输出一个文档。 | |
根据指定表达式的值对传入文档进行分组,然后计算每个不同群组中的文档数量。 | |
执行两个集合的联合;即将两个集合的管道结果合并到一个结果集中。 4.4 版本新增。 | |
从文档中删除/排除字段。 排除/删除字段的 | |
对输入文档中的某一数组字段进行解构,以便为每个元素输出文档。每个输出文档均会将此数组替换为元素值。对于每个输入文档,输出 n 个文档,其中 n 为数组元素的数量,且对于空数组可为零。 |