2012-07-31 57 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