这似乎是一个简单的问题,但是在尝试了很长时间后,我似乎无法弄清楚。
我有一个具有模式{user, documentID, rating}
的 mongodb 集合。评分范围为 1-5,因此集合可能如下所示:
userA, documentA, 5
userA, documentB, 5
userB, documentA, 1
userC, documentB, 2
(and so on...)
有没有办法通过单个查询直接在单个文档上找到每个评级的计数?所需的输出如下所示:
documentA:{
"1": 23,
"2": 24,
"3": 131,
"4": 242,
"5": 500
}
我已经阅读了如何使用aggregate
对字段进行分组,但我不确定如何使用它来返回distinct
值的计数(即 1-5(。
将非常感谢提供的任何帮助!
您可以使用聚合来实现这一点
查询如下所示
db.collection.aggregate([
{ $group:
{ _id: { document: "$document", rating: "$rating"},
sum: {$sum: 1}
}
}
])
输出将像
{_id: {"document": "documentA", "rating": 1}, "sum": 1}
{_id: {"document": "documentA", "rating": 5}, "sum": 1}
{_id: {"document": "documentB", "rating": 2}, "sum": 1}
{_id: {"document": "documentB", "rating": 5}, "sum": 1}