Mongodb:如何分组和计数
您可以使用以下语法在 MongoDB 中进行分组和计数:
db.collection.aggregate([ { $group : { _id : " $field_name ", count :{ $sum :1}}} ])
请注意, field_name是您要分组的字段。
以下示例展示了如何在具有以下文档的催收团队中使用此语法:
db.teams.insertOne({team: " Mavs ", position: " Guard ", points: 31 }) db.teams.insertOne({team: " Spurs ", position: " Guard ", 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 :1}}} ])
这将返回以下结果:
{ _id: ' Forward ', count: 1 } { _id: ' Guard ', count: 3 } { _id: ' Center ', count: 1 }
这告诉我们:
- “前进”位置出现1次。
- “守卫”位置出现3次。
- “中心”位置出现1次。
示例 2:分组和计数(然后排序)
我们可以使用以下代码来统计每个位置的出现次数,并自动按升序对结果进行排序:
db.teams.aggregate([ { $group : { _id : " $position ", count :{ $sum :1}}}, { $sort : { count : 1}} ])
这将返回以下结果:
{ _id: ' Forward ', count: 1 } { _id: ' Center ', count: 1 } { _id: ' Guard ', count: 3 }
我们可以在 count 参数中使用-1以降序对结果进行排序:
db.teams.aggregate([ { $group : { _id : " $position ", count :{ $sum :1}}}, { $sort : { count :-1}} ])
这将返回以下结果:
{ _id: ' Guard ', count: 3 } { _id: ' Forward ', count: 1 } { _id: ' Center ', count: 1 }
注意:您可以在此处找到$group的完整文档。
其他资源
以下教程解释了如何在 MongoDB 中执行其他常见操作: