Bei Verwendung von MapReduce in Mongodb werden einige Werte nicht durch Reduzieren verarbeitet, was sehr verwirrend ist. Zuerst codieren
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"
}
)
Die Daten, die ausgegeben werden sollen, sind
"_id" : {
"host" : "www.ddc.com",
"os" : "android",
"computed_on_date" : "2017-04-19",
"uid" : "0ae71c7\ne-7da6-9051-ec6c-49dc671b4e3a"
},
"value" : {
"result" : 1
}
Die tatsächlichen Ausgabedaten sind
"_id" : {
"host" : "www.ddc.com",
"os" : "android",
"computed_on_date" : "2017-04-19",
"uid" : "0ae71c7\ne-7da6-9051-ec6c-49dc671b4e3a"
},
"value" : {
"data" : "android"
}
Ich bin sehr verwirrt. Wenn der Schlüssel der Bedingung kleiner als 4 ist, wird er normal angezeigt. Wenn er größer als 3 ist oder eine Abfragebedingung hinzugefügt wird, wird keine Reduzierungsverarbeitung durchgeführt.
Eine weitere Frage ist: Wenn mapReduce eine Abfrage hat, sollte es zuerst die Abfrage oder die Reduzierung verarbeiten und dann die Abfrage im Ergebnis verarbeiten
建议使用aggregation来做。与MR比较,aggregation是MongoDB的first class的特性。
供参考。
Love MongoDB!Have fun!