文档菜单
文档首页
/
MongoDB 手册
/ /

聚合阶段

本页内容

  • 兼容性
  • db.collection.aggregate() 阶段
  • db.aggregate() 阶段
  • 可更新阶段

db.collection.aggregate() 方法和 db.aggregate() 方法,在数组中显示 管道 阶段。在 Atlas UI 中,您可以使用聚合管道构建器 来排列管道阶段。文档按顺序通过各个阶段。

您可以使用管道阶段以下环境中托管的应用程序

  • MongoDB Atlas:云中 MongoDB 部署的全托管服务

除了$out$merge$geoNear$changeStream$changeStreamSplitLargeEvent阶段外,其他阶段可以在管道中多次出现。

注意

有关特定操作符的详细信息,包括语法和示例,请单击操作符参考页面的链接。

db.collection.aggregate( [ { <stage> }, ... ] )
阶段
描述

向文档添加新字段。类似于$project$addFields$addFields重新塑形流中的每个文档;具体来说,通过向输出文档添加新字段,这些字段包含来自输入文档的现有字段和新添加的字段。

$set$addFields的别名。

根据指定的表达式和桶边界,将传入的文档分组到称为桶的组中。
根据指定的表达式将传入的文档分组到特定数量的组中,称为桶。桶边界将自动确定,以尝试将文档均匀地分布到指定的桶数中。
返回集合的变更流游标。此阶段只能在聚合管道中发生一次,并且必须作为第一个阶段发生。

将超过16 MB的大变更流事件拆分为较小的片段,并在变更流游标中返回。

您只能在$changeStream管道中使用$changeStreamSplitLargeEvent,并且它必须是管道中的最后一个阶段。

返回有关集合或视图的统计信息。

返回在聚合管道的这一阶段中文档的数量。

$count聚合累加器不同。

在字段中某些值缺失的文档序列中创建新文档。

从输入表达式返回字面文档。
在单个阶段上处理多个聚合管道,这些管道基于相同的输入文档。允许创建多方面聚合,能够在单个阶段中表征跨多个维度或方面的数据。

填充文档中的空值和缺失字段值。

根据地理空间点的邻近度返回有序的文档流。结合了地理空间数据中 $match$sort$limit 功能。输出文档包括额外的距离字段,并可包含位置标识符字段。

在集合上执行递归搜索。为每个输出文档,添加一个新数组字段,包含该文档递归搜索的遍历结果。
按指定的标识符表达式对输入文档进行分组,并针对每个组应用累加表达式(如果指定)。消耗所有输入文档,并为每个不同组输出一个文档。输出文档仅包含标识符字段,如果指定,还包括累加字段。
返回关于集合中每个索引使用情况的统计信息。
将前 n 个文档(其中 n 是指定的限制数)无修改地传递到管道中。对于每个输入文档,输出一个文档(对于前 n 个文档)或零个文档(在第一个 n 个文档之后)。
列出所有集合或特定集合的采样查询。

返回关于指定集合上现有 Atlas Search 索引 的信息。

列出所有活跃时间足够长以传播到 system.sessions 集合的会话。
在同一数据库中对另一个集合执行左外连接,以过滤“连接”集合中的文档进行处理。
过滤文档流,仅允许匹配的文档无修改地传递到下一个管道阶段。 $match 使用标准 MongoDB 查询。对于每个输入文档,输出一个文档(匹配项)或零个文档(不匹配)。
将聚合管道的结果文档写入集合。该阶段可以将结果(插入新文档、合并文档、替换文档、保留现有文档、操作失败、使用自定义更新管道处理文档)合并到输出集合中。要使用 $merge 阶段,它必须是管道中的最后一个阶段。
将聚合管道的结果文档写入集合。要使用 $out 阶段,它必须是管道中的最后一个阶段。
返回集合的 计划缓存 信息。

重新塑造流中的每个文档,例如通过添加新字段或删除现有字段。对于每个输入文档,输出一个文档。

有关删除现有字段的更多信息,请参阅 $unset

返回之前使用 setQuerySettings 添加的查询设置。

新功能在版本中8.0.

返回记录查询的运行时统计信息。

警告: $queryStats 聚合阶段不受支持,并且在未来版本中可能不稳定。不要构建依赖于该阶段特定输出格式的功能,因为输出可能在未来的版本中发生变化。

通过限制每个文档的内容来调整流中的每个文档的形状,内容限制基于文档本身存储的信息。结合了$project$match的功能。可用于实现字段级别的编辑。对于每个输入文档,输出一个或零个文档。

用指定的内嵌文档替换文档。操作会替换输入文档中所有现有字段,包括_id字段。指定输入文档中内嵌的文档以提升内嵌文档到顶层。

$replaceWith$replaceRoot阶段的别名。

用指定的内嵌文档替换文档。操作会替换输入文档中所有现有字段,包括_id字段。指定输入文档中内嵌的文档以提升内嵌文档到顶层。

$replaceWith$replaceRoot阶段的别名。

从其输入中随机选择指定数量的文档。

Atlas集合中对字段或字段进行全文搜索。

$search仅适用于MongoDB Atlas集群,不适用于自行管理的部署。有关更多信息,请参阅Atlas Search聚合管道阶段。

返回针对Atlas Search查询的Atlas集合的不同类型的元数据结果文档。

$searchMeta仅适用于MongoDB Atlas集群,不适用于自行管理的部署。有关更多信息,请参阅Atlas Search聚合管道阶段。

向文档添加新字段。类似于$project$set调整流中的每个文档;具体来说,通过向输出文档添加新字段,这些字段既包含输入文档的现有字段,也包含新添加的字段。

$set$addFields阶段的别名。

将文档分组到窗口中,并对每个窗口中的文档应用一个或多个运算符。

新功能在版本中5.0.

跳过前n个文档,其中n是指定的跳过数量,并将剩余的文档未修改地传递给管道。对于每个输入文档,输出零个文档(对于前n个文档)或一个文档(如果在第n个文档之后)。
根据指定的排序键重新排序文档流。只有顺序改变;文档保持未修改。对于每个输入文档,输出一个文档。
根据指定表达式的值对传入的文档进行分组,然后计算每个不同组中文档的计数。
执行两个集合的并集操作;即结合两个集合的管道结果到一个单一的结果集中。

从文档中移除/排除字段。

$unset$project 阶段的别名,用于移除字段。

将输入文档中的数组字段解构为输出文档,每个元素输出一个文档。每个输出文档用元素值替换数组。对于每个输入文档,输出 n 个文档,其中 n 是数组元素的数量,对于空数组,n 可以为零。

执行一个ANNENN 搜索,在 Atlas 集合的指定字段中的向量上。

$vectorSearch 仅适用于运行 MongoDB v6.0.11 或更高版本的 MongoDB Atlas 集群,并且不适用于自管理的部署。

新功能在版本中7.0.2.

有关管道阶段中使用的聚合表达式运算符,请参阅聚合运算符。

MongoDB 还提供了 db.aggregate() 方法

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

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

阶段
描述
返回集合的变更流游标。此阶段只能在聚合管道中发生一次,并且必须作为第一个阶段发生。
返回有关 MongoDB 部署中活动/不活动操作的信息。
从输入值返回字面文档。
列出最近在当前连接的 mongosmongod 实例上使用的所有活动会话。这些会话可能尚未传播到 system.sessions 集合。

您可以使用聚合管道在以下操作中进行更新

对于更新,管道可以包含以下阶段

返回

命令