Docs 菜单
Docs 主页
/

聚合操作

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

  • 将多个文档中的值分组。

  • 从分组数据计算单个结果。

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

  • 查询最新版本的数据。

MongoDB 中的聚合操作符可让您在集群上运行分析,而无需将数据移动到另一个平台。

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

  • 聚合管道,首选方法。

  • 单一目的聚合方法,其功能少于聚合管道。

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

聚合管道由一个或多个处理文档的 阶段组成:

  • 每个阶段对输入文档执行一个操作。例如,某个阶段可以过滤文档、对文档进行分组并计算值。

  • 从一个阶段输出的文档将传递到下一阶段。

  • 一个聚合管道可以返回针对文档组的结果。例如,返回总值、平均值、最大值和最小值。

如使用通过聚合管道更新中显示的阶段,则可以通过聚合管道更新文档。

注意

本页上的示例使用sample_mflix示例数据集中的数据。有关如何将此数据集加载到自管理MongoDB 部署中的详细信息,请参阅加载示例数据集。如果对示例数据库进行了任何修改,则可能需要删除并重新创建数据库才能运行本页上的示例。

以下管道可找到在数据库中执导电影最多的前三名主管。

使用 $match 阶段过滤到列出主管的电影(不包括主管字段为空或空白的文档):

{
$match : {
"directors" : { $exists: true, $ne: null, $not: {$size: 0} }
}
},

$match 阶段通过过滤没有主管信息的电影来减少管道中的文档数量。接下来,使用$unwind解构主管数组,以计算每个主管的电影数量:

{
$unwind : "$directors"
},

使用 $group 按主管名称分组文档并计算每位主管的电影数:

{
$group : {
_id : "$directors",
movieCount : {
$sum: 1
}
}
},

使用 $sort 按电影数量降序排序剩余文档:

{
$sort : {
movieCount : -1
}
},

使用 $limit 返回前三位主管:

{
$limit : 3
}

完整的管道:

db.movies.aggregate(
[
{
$match : {
"directors" : { $exists: true, $ne: null, $not: {$size: 0} }
}
},
{
$unwind : "$directors"
},
{
$group : {
_id : "$directors",
movieCount : {
$sum: 1
}
}
},
{
$sort : {
movieCount : -1
}
},
{
$limit : 3
}
]
)

该管道返回以下结果:

[
{ _id: 'Woody Allen', movieCount: 40 },
{ _id: 'Martin Scorsese', movieCount: 32 },
{ _id: 'Takashi Miike', movieCount: 31 }
]

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

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

单一目的聚合方法从单一集合中聚合文档。这些方法的功能少于聚合管道。

方法
说明

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

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

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

后退

货币数据

获得技能徽章

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

了解详情

在此页面上