2012-07-31 111 views
0

我是mongodbs mapreduce的新手,当然我现在还没有完全理解它。我有一个问题,我试图解决几天而没有成功。获取每个标签的所有对象

我有一个让我们说标签字段的帖子的集合。现在我想映射一个新的标签集合。每个标签都有一个所有帖子id的数组,这些标签分配了一个特定的标签。

我试图做到这一点的一个(不这样做的权利)

m = function() { 
    for (var i in this.tags) { 
    emit(this.tags[i], {"ids" : [this._id]}); 
}; 
} 

r = function(key, emits) { 
var total = {ids : []} 
for (var i in emits) { 
    emits[i].ids.forEach(function(id) { 
     total.ids.push(id); 
    } 
} 
return total; 
}; 

我知道,我有一些如何围绕转动的日期,但我就是不能让我的头缠着它。

+0

澄清你的问题,你可以发布样本输入文档以及地图的预期输出减少? – Jenna 2012-07-31 20:14:43

回答

0

我想你在reduce函数中缺少一个“)”来关闭emits [i] .ids.forEach()。这是你想要做的吗?

r = function (key, values) { 
    var total = {ids:[]}; 
    for (var i in values) { 
     values[i].ids.forEach(
      function (id){ 
       total.ids.push(id); 
      } 
     ); 
    } 
    return total; 
} 

输入

{_id:2, tags: ["dog", "Jenna"]} 
{_id:1, tags: ["cat", "Jenna"]} 

结果:

{"results" : [ 
     {"_id" : "Jenna", 
     "value" : {"ids" : [2,1]} 
     }, 
     {"_id" : "cat", 
     "value" : {"ids" : [1]} 
     }, 
     {"_id" : "dog", 
     "value" : {"ids" : [2]} 
     } 
    ], 
    "timeMillis" : 1, 
    "counts" : { 
     "input" : 2, 
     "emit" : 4, 
     "reduce" : 1, 
     "output" : 3 
    }, 
    "ok" : 1, 
} 
+0

非常感谢,它对我来说非常有效! – srge 2012-08-01 13:05:05