【发布时间】:2011-12-27 08:26:02
【问题描述】:
我只是在学习 mapReduce。我在一组用户上调用了以下 map reduce 函数。
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
为什么会这样?有什么方法可以将我的结果重新加入到一个连贯的单个数组中?
【问题讨论】:
标签: javascript arrays mongodb mapreduce