聚合操作处理多个文档并返回计算结果。您可以使用聚合操作来:
将多个文档中的值组合在一起。
对分组数据执行操作,返回单一结果。
分析一段时间内的数据变化。
查询最新版本的数据。
通过使用MongoDB中内置的聚合操作符,您可以在集群上执行分析,而无需将数据移动到另一个平台。
开始体验
若要执行聚合操作,您可以使用:
您可在用户界面中为 MongoDB Atlas 中托管的部署运行聚合管道。
聚合管道
聚合管道由一个或多个进程文档的 阶段组成。这些文档可以来自集合、视图或专门设计的阶段。
每个阶段都对输入文档执行操作。示例,阶段可以 $filter
文档、$group
文档并计算值。然后,一个阶段输出的文档将传递到管道中的下一阶段。
聚合管道可以返回文档组的结果。您还可以使用使用聚合管道进行更新中所示的阶段,通过聚合管道更新文档。
注意
使用 db.collection.aggregate()
方法运行的聚合管道不会修改集合中的文档,除非管道包含 $merge
或 $out
阶段。
聚合管道示例
以下示例管道使用MongoDB Atlas中提供的示例数据中的文档,特别是 sample_training.routes
集合。在此管道中,我们将找到提供从美国俄勒冈州波特兰 (PDX) 机场出发的最多直飞航班的前三名航空公司。
首先,添加一个$match
阶段来过滤src_airport
值为 PDX
且 stops
为零的航班的文档:
{ $match : { "src_airport" : "PDX", "stops" : 0 } }
$match
阶段将管道中的文档数量从 66、985 减少到 113。接下来,按航空公司名称 $group
文档并计算航班数量:
{ $group : { _id : { "airline name": "$airline.name", } count : { $sum : 1 } } }
$group
阶段将管道中的文档数量减少为 16 条航空公司。要查找拥有最多航班的航空公司,请使用 $sort
阶段对剩余文档进行降序排序:
{ $sort : { count : -1 } }
对文档进行排序后,使用 $limit
阶段返回提供从 PDX 出发的直飞航班最多的前三名的航空公司:
{ $limit : 3 }
通过此聚合管道将文档放入 sample_training.routes
集合后,提供从 PDX 直飞航班的三大航空公司是阿拉斯加航空、美国航空和联合航空,分别有 39、17 和 13 航班。
完整的管道如下所示:
db.routes.aggregate( [ { $match : { "src_airport" : "PDX", "stops" : 0 } }, { $group : { _id : { "airline name": "$airline.name", } count : { $sum: 1 } } }, { $sort : { count : -1 } }, { $limit : 3 } ] )
有关包含样本输入文档的可运行示例,请参阅完整聚合管道示例。
了解有关聚合管道的更多信息
如需了解有关聚合管道的更多信息,请参阅聚合管道。
单一目的聚合方法
单一目的聚合方法聚合单个集合中的文档。这些方法很简单,但缺乏聚合管道的功能。
方法 | 说明 |
---|---|
返回集合或视图中文档的近似数量。 | |
返回集合或视图中文档的数量。 | |
返回具有指定字段的不同值的文档数组。 |