我只是在學習mapReduce。我在用戶集合上調用了以下映射reduce函數。在Mongo中重新加入Split MapReduce陣列
function() {
m = function() {
emit(this.city, {num:1, arr:this});
}
r = function (key, arr_values) {
var resultArray = [];
var count = 0;
arr_values.forEach(function (value) {
resultArray.push(value);
count++;
});
return {num:count, arr:resultArray};
}
res = db.AdsOnPage.mapReduce(m, r, {out:"ReducedCollection"});
}
這最終給我什麼,我需要 - 「城市」作爲重點,然後用戶在那個城市作爲值的數組。但它實際上是給了我一個荒謬的嵌套數組。我認爲這是由於分片而發生的?但我如何重新加入一切?現在,結果看起來像這樣:
{
"city":"Chicago",
"value" : {
"num" : 2.0,
"arr" : [{
"num" : 2.0,
"arr" : [{
"num" : 1.0,
"arr" : [{
<user doc is here>
}]
}, {
"num" : 1.0,
"arr" : [{
<user doc is here>
}]
}]
}
.......
for many many arrays
爲什麼會發生這種情況?有什麼方法可以將我的結果重新加入到一個連貫的單個數組中嗎?
謝謝,@蓋茨。但我想真正的問題是,即使解決了嵌套後,我的結果被返回分裂成多個數組。你說「正確地結合它們」。我會怎麼做? – carlbenson
在'reduce'方法中'arr_values'是一個值數組。每個值本身就是一個數組。所以你不能執行'resultArray.push(value);',你所推送的'value'是一個數組。所以你需要在reduce中循環每個值的另一個循環。 –