Mongodb聚合李克特规模



这似乎是一个简单的问题,但是在尝试了很长时间后,我似乎无法弄清楚。

我有一个具有模式{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}

最新更新