Lors de l'utilisation de mapReduce dans mongodb, certaines valeurs ne sont pas traitées par réduire, ce qui est très déroutant. Codez d’abord
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"
}
)
Les données qui doivent être sorties sont
"_id" : {
"host" : "www.ddc.com",
"os" : "android",
"computed_on_date" : "2017-04-19",
"uid" : "0ae71c7\ne-7da6-9051-ec6c-49dc671b4e3a"
},
"value" : {
"result" : 1
}
Les données de sortie réelles sont
"_id" : {
"host" : "www.ddc.com",
"os" : "android",
"computed_on_date" : "2017-04-19",
"uid" : "0ae71c7\ne-7da6-9051-ec6c-49dc671b4e3a"
},
"value" : {
"data" : "android"
}
Je suis très confus. Lorsque la clé de l'émission de condition est inférieure à 4, elle s'affichera normalement si elle est supérieure à 3 ou si une condition de requête est ajoutée, le traitement de réduction ne sera pas effectué.
Une autre question est, lorsque mapReduce a une requête, doit-il d'abord traiter la requête ou traiter la réduction, puis traiter la requête dans le résultat
Il est recommandé d'utiliser l'agrégation. Par rapport au MR, l'agrégation est la fonctionnalité de première classe de MongoDB.
Pour référence.
J'adore MongoDB ! Amusez-vous!