这似乎是一个简单的问题,但我似乎无法在尝试相当长的时间后弄明白。
我有一个具有架构{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) )。
非常感谢您提供的任何帮助!
答案 0 :(得分:1)
你可以使用聚合
来实现这个目标查询看起来像
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}