我有一个收藏品,看起来像这样:
{
"_id": "id0",
"name": "...",
"saved_things": [
{ ... },
{ ... },
{ ... },
]
}
{
"_id": "id1",
"name": "...",
"saved_things": [
{ ... },
]
}
{
"_id": "id2",
"name": "...",
"saved_things": [
{ ... },
]
}
我希望使用MongoDB的聚合框架来生成一个直方图结果,告诉我有多少用户有一个特定数量的“saved_things”。例如,对于上面的数据集,它可以返回类似以下内容的结果:{ "_id": 1, "count": 2 },
{ "_id": 3, "count": 1 }
我尝试了像以下这样的不同聚合函数的组合,但没有一个能够正确地解决问题。(我感觉自己做错了什么。)
collection.aggregate([
{ $unwind: "$saved_things" },
{ $group: "$_id", count: { $sum: 1 } } },
{ $group: "$count", number: { $sum: 1 } } },
{ $sort: { number: -1 } }
], function(err, result) {
console.log(result);
});
使用Mongo的聚合框架可以实现这个吗,还是用MapReduce函数更好?