Docs 菜单
Docs 主页
/
数据库手册

聚合操作

聚合操作处理多个文档并返回计算结果。您可以使用聚合操作来:

  • 将多个文档中的值组合在一起。

  • 对分组数据执行操作,返回单一结果。

  • 分析一段时间内的数据变化。

  • 查询最新版本的数据。

通过使用MongoDB中内置的聚合操作符,您可以在集群上执行分析,而无需将数据移动到另一个平台。

若要执行聚合操作,您可以使用:

  • 聚合管道,这是执行聚合的首选方法。

  • 单一目的聚合方法,这些方法很简单,但缺乏聚合管道的功能。

您可在用户界面中为 MongoDB Atlas 中托管的部署运行聚合管道

聚合管道由一个或多个进程文档的 阶段组成。这些文档可以来自集合、视图或专门设计的阶段。

每个阶段都对输入文档执行操作。示例,阶段可以 $filter 文档、$group 文档并计算值。然后,一个阶段输出的文档将传递到管道中的下一阶段。

聚合管道可以返回文档组的结果。您还可以使用使用聚合管道进行更新中所示的阶段,通过聚合管道更新文档。

注意

使用 db.collection.aggregate() 方法运行的聚合管道不会修改集合中的文档,除非管道包含 $merge$out 阶段。

以下示例管道使用MongoDB Atlas中提供的示例数据中的文档,特别是 sample_training.routes集合。在此管道中,我们将找到提供从美国俄勒冈州波特兰 (PDX) 机场出发的最多直飞航班的前三名航空公司。

首先,添加一个$match阶段来过滤src_airport 值为 PDXstops 为零的航班的文档:

{
$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
}
] )

有关包含样本输入文档的可运行示例,请参阅完整聚合管道示例。

如需了解有关聚合管道的更多信息,请参阅聚合管道。

单一目的聚合方法聚合单个集合中的文档。这些方法很简单,但缺乏聚合管道的功能。

方法
说明

返回集合或视图中文档的近似数量。

返回集合或视图中文档的数量。

返回具有指定字段的不同值的文档数组。

后退

数据库引用

获得技能徽章

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

了解详情

在此页面上