J'ai créé le suivant Réduire la carte et suis tombé sur quelque chose de curieux. Je compte de deux façons différentes le nombre de documents par date et en proposant différentes valeurs. Voici mes fonctions:Couting lignes dans MapReduce dans MongoDB
map : function Map() {
emit(
this.cDate,//Holds a date value
{
count: 1,
}
);
}
reduce : function Reduce(key, values) {
var reduced = {count:0,count1:0};
values.forEach(function(val) {
reduced.count += val.count;
reduced.count1++;
});
return reduced;
}
finalize : function Finalize(key, reduced) {
return reduced;
}
query : { "cDate" : { "$gte" : ISODate("2012-11-20T00:00:00Z") } }
out : { inline : 1 }
donc en gros ce qui est étrange est que, à la fin « compte » et « count1 » retournent des valeurs différentes. "count" a la valeur correcte, c'est-à-dire le nombre de documents pour cette date tandis que "count1" a une valeur beaucoup plus faible. Quelqu'un peut-il expliquer (je suis nouveau à MongoDB donc utiliser des termes simples :-) Merci.
Salut 1. Même si j'ajoute Count1 à l'émission, j'obtiens le même résultat 2. wouldnt "count1" être le même ou plus grand que "count" si réduire a été appelé plusieurs fois? – adinas
non, vous incrémentez count1 de 1 au lieu de by en passé count - ce que vous supposez sera toujours 1, et ce n'est pas le cas. –
OK, donc vous dites que même si j'ai défini "count: 1" dans emit, je n'obtiendrai pas toujours 1 dans la réduction car il peut être une réduction sur une réduction. Oui? – adinas