在mongodb 中 使用mapReduce 有一部分value不經過reduce處理,很是疑惑。先上程式碼
db.test.mapReduce(
function () {
emit({
host: this.host,
os: this.os,
computed_on_date: this.computed_on_date,
uid: this.uid
}, {data: this.os});
},
function (key, value) {
return {result: 1};
},
{
out: "a"
}
)
應該輸出的資料為
"_id" : {
"host" : "www.ddc.com",
"os" : "android",
"computed_on_date" : "2017-04-19",
"uid" : "0ae71c7\ne-7da6-9051-ec6c-49dc671b4e3a"
},
"value" : {
"result" : 1
}
實際輸出資料為
"_id" : {
"host" : "www.ddc.com",
"os" : "android",
"computed_on_date" : "2017-04-19",
"uid" : "0ae71c7\ne-7da6-9051-ec6c-49dc671b4e3a"
},
"value" : {
"data" : "android"
}
非常疑惑,在條件emit的key少於4個時候,會正常顯示,如果大於3個或加了query條件,就不會進行reduce處理。
另外有一個問題,mapReduce在有query時,是先處理query還是選處理reduce再在結果中處理query
建議使用aggregation來做。與MR比較,aggregation是MongoDB的first class的特性。
供參考。
Love MongoDB! Have fun!