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 中执行其他常见操作: