对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

聚合阶段

db.collection.aggregate()db.aggregate() 方法中,管道阶段出现在数组中。文档按顺序经历这些阶段。在Atlas用户界面中,使用聚合管道构建器来安排管道阶段。

$out$merge$geoNear$changeStream$changeStreamSplitLargeEvent 阶段之外的所有阶段都可以在管道中多次出现。

注意

有关特定命令(包括事务语法和示例)的详细信息,请单击该命令的参考页面链接。

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

核心阶段

在聚合管道中过滤、重塑、群组和组合文档的阶段。

阶段
说明

为文档添加新字段。与 $project 类似,$addFields 重塑了流中的每个文档;具体来说,就是在输出文档中添加新字段,这些输出文档既包含输入文档中的现有字段,也包含新添加的字段。

$set$addFields 的别名。

根据指定的表达式和存储桶边界将传入的文档分为多个组(称为存储桶)。

根据指定的表达式,将接收到的文档归类到特定数量的群组中(称为“存储桶”)。自动确定存储桶边界,以尝试将文档均匀地分配到指定数量的存储桶中。

返回聚合管道此阶段的文档数量计数。

有别于 $count 聚合累加器。

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

从输入表达式返回字面文档。

在单个阶段内处理同一组输入文档上的多个聚合管道。支持创建多分面聚合,能够在单个阶段中跨多个维度或分面描述数据特征。

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

根据与地理空间点的接近程度返回有序的文档流。针对地理空间数据,整合了 $match$sort$limit 功能。输出文档包含一个额外的距离字段,并可包含一个位置标识符字段。

对集合执行递归搜索。为每个输出文档添加一个新数组字段,其中包含该文档的递归搜索遍历结果。

按指定的标识符表达式对输入文档进行分组,并将累加器表达式(如果指定)应用于每个群组。接收所有输入文档,并为每个不同群组输出一个文档。输出文档仅包含标识符字段和累积字段(如果指定)。

将未修改的前 n 个文档传递到管道,其中 n 为指定的限制。对于每个输入文档,输出一个文档(针对前 n 个文档)或零个文档(前 n 个文档之后)。

对同一数据库中的另一个集合或视图执行左外连接,以过滤“已连接”集合或视图中的文档进行处理。

筛选文档流以仅允许匹配的文档将未修改的文档传入下一管道阶段。$match 使用标准 MongoDB 查询。对于每个输入文档,输出一个文档(一个匹配项)或零个文档(无匹配项)。

将 aggregation pipeline 的结果文档写入集合。该阶段可将结果(插入新文档、合并文档、替换文档、保留现有文档、操作失败、使用自定义更新管道处理文档)纳入输出集合。要使用 $merge 阶段,它必须是管道中的最后一个阶段。

将 aggregation pipeline 的结果文档写入集合。要使用 $out 阶段,它必须是管道中的最后一个阶段。

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

另请参阅 $unset 以了解如何删除现有字段。

根据文档中存储的信息来限制每个文档的内容,从而重塑流中的每个文档。结合了 $project$match 的功能。可用于实现字段级别访问控制。对于每个输入文档,输出一个或零个文档。

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

$replaceWith$replaceRoot 阶段的别名。

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

$replaceWith$replaceRoot 阶段的别名。

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

为文档添加新字段。与 $project 类似,$set 重塑了流中的每个文档;具体来说,就是在输出文档中添加新字段,这些输出文档既包含输入文档中的现有字段,也包含新添加的字段。

$set$addFields 阶段的别名。

将文档分组到窗口中,并将一个或多个操作符应用于每个窗口中的文档。

版本 5.0 中的新增功能。

跳过前 n 个文档,其中 n 是指定的跳过编号,并将未修改的剩余文档传递到管道。对于每个输入文档,输出零个文档(对于前 n 个文档)或一个文档(如果在前 n 个文档之后)。

按指定的排序键对文档流重新排序。仅顺序会改变,而文档则保持不变。对于每个输入文档,输出一个文档。

根据指定表达式的值对传入文档进行分组,然后计算每个不同群组中的文档数量。

执行两个集合的并集; ie 将两个集合或视图的管道结果合并到一个结果设立。

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

$unset 是删除字段的 $project 阶段的别名。

对输入文档中的某一数组字段进行解构,以便为每个元素输出文档。每个输出文档均会将此数组替换为元素值。对于每个输入文档,输出 n 个文档,其中 n 为数组元素的数量,且对于空数组可为零。

语言扩展

使用专门功能(例如Atlas Search和变更流)扩展聚合语言的阶段。

阶段
说明

返回集合的 Change Stream 游标。此阶段只能在 aggregation pipeline 中发生一次,并且必须作为第一阶段发生。

将超过 16 MB 的大型 change stream 事件分割成较小的分段,在 change stream 游标中返回。

您只能在 $changeStream 管道中使用 $changeStreamSplitLargeEvent,且它必须为该管道中的最后阶段。

合并对文档进行排名的输入管道的结果。$rankFusion 对输入管道结果去重,并使用倒数排名融合算法创建最终文档排名。

对集合中的字段或多个字段执行全文搜索。

要学习;了解更多信息,请参阅MongoDB搜索聚合管道阶段。

为针对 Atlas 集合的 MongoDB 搜索查询 返回不同类型的元数据结果文档。 要学习;了解更多信息,请参阅MongoDB搜索聚合管道阶段。

Performs an ANN or ENN search on a vector in the specified field of an Atlas collection.

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

7.0.2版本新增。

元数据源

返回有关部署的元数据的阶段,例如集合统计信息、索引信息和活动操作。

阶段
说明

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

返回 MongoDB 部署的活动和/或休眠操作的信息。

Uses the db.aggregate() method instead of the db.collection.aggregate() method.

返回有关集合的每个索引使用情况的统计信息。

检索集群中集合的信息,包括名称和创建选项。

列出当前连接的 mongosmongod 实例上最近使用的所有活动会话。这些会话可能尚未传播到 system.sessions 集合。

Uses the db.aggregate() method instead of the db.collection.aggregate() method.

列出所有集合或特定集合的抽样查询。

返回指定集合或视图上现有MongoDB Search 索引的信息。

列出活动时间足够长、足以传播到 system.sessions 集合的所有会话。

返回集合的计划缓存信息。

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

8.0版本新增。

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

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

返回分片集合中的数据分布信息。

Uses the db.aggregate() method instead of the db.collection.aggregate() method.

6.0.3版本新增。

要学习;了解可在管道阶段使用的表达式,请参阅表达式。

使用聚合管道进行更新:

对于更新,管道支持以下阶段:

获得技能徽章

免费掌握“数据转换基础”!

了解详情

给本页内容打分