【发布时间】:2013-07-31 01:47:55
【问题描述】:
我有一个看起来像这样的集合:
{
"_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 的聚合框架实现,还是使用 map reduce 函数会更好?
【问题讨论】:
-
你的意思是有多少用户有一定数量的saved_things subcollectin?给定
saved_thing,您想知道哪些用户拥有saved_things以及多少?是吗? -
嗯,我的措辞似乎令人困惑,对此感到抱歉!我认为示例输出最能描述我正在寻找的内容,但我会再次尝试描述它。我想为集合中的每个用户获取
saved_things中的对象数,并汇总该计数的频率。它用于生成用户数量的直方图saved_things(如果有意义的话)。让我知道这是否仍然令人困惑。
标签: mongodb mapreduce aggregation-framework