【发布时间】:2014-04-01 14:21:55
【问题描述】:
我有一个Item 模型,它有一个属性category。我想要按类别分组的项目计数。我为这个功能写了一个 map reduce。它工作正常。我最近编写了一个脚本来创建 5000 个项目。现在我意识到我的 map reduce 只给出了最后 80 条记录的结果。以下是mapreduce函数的代码。
map = %Q{
function(){
emit({},{category: this.category});
}
}
reduce = %Q{
function(key, values){
var category_count = {};
values.forEach(function(value){
if(category_count.hasOwnProperty(value.category))
category_count[value.category]++;
else
category_count[value.category] = 1
})
return category_count;
}
}
Item.map_reduce(map,reduce).out(inline: true).first.try(:[],"value")
经过一番研究,我发现了mongodb invokes reduce function multiple times。如何才能实现我想要的功能?
【问题讨论】:
-
也许你的脑子里没有得到足够的重视,但是这个问题在输入的文档和想要的结果方面也缺乏足够的细节来得到回应。没有人回答,因为没有足够的细节来回答。您现在没有累积接近投票的唯一原因是因为您提供了赏金。使用详细信息编辑您的问题以获得答案。
-
有足够的细节来回答 - 我在回答中说明了他做错了什么,如何正确做以及有什么更好的方法。
标签: ruby-on-rails mongodb mapreduce mongoid