0
我測試的MapReduce功能,但我有意外的行爲:用MongoDB的MapReduce的意外行爲
我填充我收藏的這個簡單的循環:
for (i=0; i<10000; i++) {db.coll.insert({'a':1,'b':2})}
所以我想指望用相同的文件'A' 值(這是一個測試:-)) 我的地圖功能是
map = "function() { emit(this.a,this.b);}"
,並減少是:
reduce = "function (key,values) {return values.length;}"
調用 db.coll.mapReduce(地圖,減少{出來:{在線:1}})
的預期值是10000個文檔使用相同的 'A',它的確定?
但結果是:
db.coll.mapReduce(map, reduce, {out:{inline:1}})
{
"results" : [
{
"_id" : 1,
"value" : 101
}
],
"timeMillis" : 892,
"counts" : {
"input" : 10000,
"emit" : 10000,
"reduce" : 100,
"output" : 1
},
"ok" : 1,
}
問題出在哪裏???爲什麼價值是101?減少計數結果的含義是什麼? 幫幫我!提前致謝!!!
它可能並不明顯,爲什麼你得到了101,但它實際上是相當可預測的,因爲reduce函數並不是只針對每個具有大量所有值的鍵調用一次,而是將值分組,然後reduce可以稱爲多個次數用新的數組值重新減少已經減少的值 - 批次爲100將導致最後一次調用時值數組的長度爲101。 – 2013-04-28 00:27:29