Mongodb:如何分组和求和


您可以使用以下语法在 MongoDB 中进行分组和计数:

 db.collection.aggregate([
    { $group : { _id : " $field_name1 ", count :{ $sum : " $field_name2 "}}}
])

请注意, field_name1是您要分组的字段, field_name2是您要求和的字段。

以下示例展示了如何在具有以下文档的催收团队中使用此语法:

 db.teams.insertOne({team: " Mavs ", position: " Guard ", points: 31 })
db.teams.insertOne({team: " Spurs ", position: " Forward ", points: 22 })
db.teams.insertOne({team: " Rockets ", position: " Center ", points: 19 })
db.teams.insertOne({team: " Warriors ", position: " Forward ", points: 26 })
db.teams.insertOne({team: " Cavs ", position: " Guard ", points: 33 })

示例 1:分组依据和求和

我们可以使用下面的代码按“位置”字段进行分组,并计算每个位置的得分总和。

 db.teams.aggregate([
    { $group : { _id : " $position ", count :{ $sum : " $points "}}}
])

这将返回以下结果:

 { _id: ' Forward ', count: 48 }
{ _id: ' Guard ', count: 64 }
{ _id: ' Center ', count: 19 }

这告诉我们:

  • “攻击者”位置的玩家总共有48分。
  • 担任“后卫”位置的球员总共有64分。
  • 处于“中锋”位置的球员总共有19分。

示例 2:分组并添加(然后排序)

我们可以使用以下代码求出每个位置的点数总和,并自动按升序对结果进行排序:

 db.teams.aggregate([
    { $group : { _id : " $position ", count :{ $sum : " $points "}}},
    { $sort : { count : 1}} 
])

这将返回以下结果:

 { _id: ' Center ', count: 19 }
{ _id: ' Forward ', count: 48 }
{ _id: ' Guard ', count: 64 }

结果按点升序排列(从小到大)。

我们可以在 count 参数中使用-1降序对结果进行排序

 db.teams.aggregate([
    { $group : { _id : " $position ", count :{ $sum : " $points "}}},
    { $sort : { count :-1}} 
])

这将返回以下结果:

 { _id: ' Guard ', count: 64 }
{ _id: ' Forward ', count: 48 }
{ _id: ' Center ', count: 19 }

请注意,结果按点降序排列(从大到小)。

注意:您可以在此处找到$group的完整文档。

其他资源

以下教程解释了如何在 MongoDB 中执行其他常见操作:

MongoDB:如何计算字段中的不同值
MongoDB:如何按多个字段分组
MongoDB:如何分组和计数

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注