MongoDB 的 MapReduce 计算结果不正确

2014-02-07 23:32:36 +08:00
 lukefan
我有一个数据库,里面有九百多条资源信息。并对这九百多条信息,标记了两千多个标签。
于是写了一个map_reduce,计算每个tag从属的资源数量。
一开始是使用count进行累加的,结果发现很多数字都比实际结果多了一倍,也就是说有些标签,只有一个资源标注了,但是统计的结果却是二。
于是,我就将统计count的方式,改成了累计_id,结果发现确实是将很多数据重复记录了,但也不是每次都这样。于是在记录的时候,再加上了去重的指令,结果依然无效。
代码如下:

map = %Q{
function() {
var id = this._id;
this.tag_ids.forEach(function(tag_id) {
emit(tag_id, {
resources: [id]
})
})
}
}
reduce = %Q{
function(key, values) {
var result = {
resources: [],
};
values.forEach(function(value) {
value.resources.forEach(function(resource){
result.resources.push(resource);
});
});
return result;
}
}
Resource.map_reduce(map, reduce).out(inline: true);

请帮忙看看。

全部代码:https://gitcafe.com/lukefan/test6
上面的函数在:https://gitcafe.com/lukefan/test6/blob/master/app/models/resource.rb
4032 次点击
所在节点    MongoDB
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/99288

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX