personnellement j'effectue une MapReduce sur la collection:
carte
est une fonction simple émettant le champ « Subida ». La clé devrait être la même si vous avez besoin d'une somme unique; le résultat après réduire donnera l'objet unique {<key>: <sum>}
, avec <key>
étant la valeur que vous avez fournie dans l'émission.
map = function() { emit(<key>, this.subida); }
réduire est également une fonction simple en les sommant:
red = function(k, v) {
var i, sum = 0;
for (i in v) {
sum += v[i];
}
return sum;
}
Vous pouvez ensuite appeler MapReduce sur votre collection <mycollection>
:
res = db.<mycollection>.mapReduce(map, red);
qui va créer une nouvelle collection temporaire vous pouvez manipuler comme toute autre collection. La valeur renvoyée par mapReduce contient plusieurs valeurs concernant mapReduce telles que le temps pris, le statut ..., ainsi que le temp. nom de collection créé dans le champ "résultat". Pour obtenir les valeurs dont vous avez besoin, vous devez interroger cette collection:
db[res.result].find()
qui devrait vous donner l'objet {<key>: <sum>}
.
Si vous exécutez MongoDB 1.7.4 ou plus, vous pouvez vous faire économiser un peu de tracas en demandant MongoDB pour retourner le résultat directement sans créer une collection:
db.<mycollection>.mapReduce(map, red, {out : {inline: 1}});
Merci beaucoup ami, je peux enfin faire cette requête, fonctionne parfaitement dans mongo shell. J'ai été implémenté en python dans mon application ... Je vois maintenant que les requêtes mongodb map/reduce ne sont pas égales à CouchDB map/reduce queries ... LOL: D – JAM
c'est la requête implémentée en python http://pastebin.com/du8yrk3p: D – JAM
Juste intéressé pourquoi vous choisiriez mapreduce au-dessus de l'agrégation? – UpTheCreek