聚合管道由一个或多个进程文档的阶段组成。这些文档可以来自集合、视图或专门设计的阶段。
每个阶段都对输入文档执行操作。示例,阶段可以 $filter 个文档、$group 个文档并计算值。然后,一个阶段输出的文档将传递到管道中的下一阶段。
聚合管道可以返回文档组的结果。您还可以使用使用聚合管道进行更新中所示的阶段,通过聚合管道更新文档。
注意
使用 db.collection.aggregate() 方法运行的聚合管道不会修改集合中的文档,除非管道包含 $merge 或 $out 阶段。
当您在 MongoDB Atlas 用户界面中的 MongoDB Atlas 部署上运行聚合管道时,您可以预览每个阶段的结果。
You can also use an LLM to generate aggregation pipelines from natural language. To learn more, see Natural Language to MongoDB Queries.
完整的 Aggregation Pipeline 示例
The Complete Aggregation Pipeline Tutorials section contains step-by-step tutorials for common aggregation tasks, with examples for MongoDB Shell and each of the official MongoDB drivers.
运行聚合管道
要运行聚合管道,请使用:
其他聚合管道阶段详细信息
聚合管道由一个或多个处理文档的阶段组成:
阶段不需要为每个输入文档输出一个文档。某些阶段会产生新文档或过滤掉文档。
有关所有聚合阶段,请参阅聚合阶段。
表达式和操作符
在聚合管道中,表达式定义阶段如何处理管道中的每个输入文档。例如,表达式可以定义要包含的文档、如何重新塑造字段或如何计算新值。
某些聚合管道阶段接受表达式。运算符根据输入表达式计算值。
在 MongoDB 查询语言中,您可以从以下组件构建表达式:
组件 | 例子 |
|---|---|
常量 |
|
操作符 | |
字段路径表达式 |
|
示例,{ $add: [ 3, "$inventory.total" ] } 是由 $add操作符和两个操作数组成的表达式:
常量
3The field path expression
"$inventory.total"
表达式返回将 3 添加到输入文档中路径 inventory.total 处的值的结果。
字段路径
字段路径(Field Path)表达式访问输入文档中的字段。在字段名称前加上美元符 $。例如,"$user" 引用 user 字段,"$user.name" 引用嵌入式 user.name 字段。
有关更多示例,请参阅 字段路径(Field Path)。
使用聚合管道更新文档
要使用聚合管道更新文档,请使用:
其他注意事项
聚合管道限制
有关值类型和结果大小的限制,请参阅聚合管道限制。
聚合管道和分片集合
聚合管道支持针对分片集合的操作。请参阅聚合管道和分片集合。
重要
Aggregation Pipeline 作为 Map-Reduce 的替代方案
从 MongoDB 5.0 开始,map-reduce 已弃用。
有关 map-reduce 的聚合管道替代方案的示例,请参阅:
了解详情
要了解有关聚合管道的详细信息,请参阅: