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