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