【发布时间】:2011-12-12 22:24:16
【问题描述】:
我是 map / reduce 的新手,并试图找出一种方法来使用 map / reduce 收集以下数据,而不是使用我的(慢)应用程序逻辑:
我有一个集合“项目”,与集合“任务”有 1:n 的关系。现在我想收到一组结果,其中给出了项目名称,其中第一个是任务最多的项目,最后一个是任务最少的项目。
或者更好的哈希数组也告诉我每个项目有多少任务(假设项目名称是唯一的:
[project_1: 23, project_2: 42, project_3: 82]
对于地图,我尝试了类似的方法:
map = function () {
emit(this.project_id, { count:1 });
}
并减少:
reduce = function (key, values) {
var sum = 0;
values.forEach(function(doc){ sum += 1; });
return { count:sum };
}
我对我的任务集合触发了这个:
var mr = db.tasks.mapReduce(map, reduce, { out: "results" });
但我在查询时得到了重要的结果:
db[mr.result].find();
我在 Rails 上使用 Mongoid,完全迷失了方向。有人能指出我正确的方向吗?
提前谢谢。 费利克斯
【问题讨论】: