Bonjour, Je test dans MongoDB, la possibilité de faire remonter des objets dans une fonction map pour pouvoir le retravailler dans la fonction reduce. Je démarre avec un objet simple pour compter le nombre de mel d’un agent. 3 parties dans le code. La première partie de mon code n’est là que pour avoir le « bon résultat » La deuxième partie de mon code n’est là que pour avoir le « bon résultat » en utilisant une autre méthode. La troisième partie, j’essaie d’obtenir un résultat analogue mais en passant un objet. Cette troisième partie ne fonctionne pas. je teste sur une collection qui contient deux adresses mel et 79 message pour l'une et 126 pour l'autre. le résultat est une collection de 2 avec en id l'adresse et en value 1.#QNAN0. j'ai essayé de forcer le type, cela ne change rien.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | //Partie 1 //Prends le groupe dans l'accumulateur et le traite db.Resultat.drop(); var mapMel = function() { emit(this.EMAIL_AGNT, 1); }; var reduceMel = function (melId, source){ return Array.sum(source); }; db.MEL.mapReduce(mapMel, reduceMel, {out: "Resultat"} ); db.getCollection('Resultat').find({}); //partie 2 // utilisation de la fonction forEach db.Resultat.drop(); var mapMel = function() { emit(this.EMAIL_AGNT, 1); }; var reduceMel = function( melId, source ) { var somme = 0; source.forEach(function(v) { somme +=v; }); return somme; } db.MEL.mapReduce(mapMel, reduceMel, {out: "Resultat"} ); db.getCollection('Resultat').find({}); //partie 3 // tentative de passage d'un objet au lieu d'une valeur db.Resultat.drop(); var mapMel = function() { var nombre = {nbre:1}; emit(this.EMAIL_AGNT, nombre); }; var reduceMel = function( melId, source) { var somme = 0; source.forEach(function(v) { //somme +=parseInt(v.nbre); somme +=v.nbre; }); return somme; }; db.MEL.mapReduce(mapMel, reduceMel, {out: "Resultat"} ); db.getCollection('Resultat').find({}); |