Personalmente me realizo una mapreduce en la colección:
mapa es una función simple que emite el campo "subida". La clave debería ser la misma si necesita una sola suma; el resultado después de reducir arrojará el único objeto {<key>: <sum>}
, siendo <key>
el valor que haya proporcionado en la emisión.
map = function() { emit(<key>, this.subida); }
reducir también es una función simple sumándolos:
red = function(k, v) {
var i, sum = 0;
for (i in v) {
sum += v[i];
}
return sum;
}
A continuación, puede llamar mapreduce en su colección <mycollection>
:
res = db.<mycollection>.mapReduce(map, red);
que va a crear una nueva colección temporal se puede manipular como cualquier otra colección El valor devuelto por mapReduce contiene varios valores con respecto al mapReduce, como el tiempo empleado, el estado ..., así como la temperatura. nombre de la colección creado en el campo "resultado". para obtener los valores que necesita, usted tiene que consultar esa colección:
db[res.result].find()
que debe dar el objeto {<key>: <sum>}
.
Si ejecuta MongoDB 1.7.4 o superior, se puede ahorrar un poco de molestia preguntando MongoDB vuelta el resultado directamente sin crear una colección:
db.<mycollection>.mapReduce(map, red, {out : {inline: 1}});
Muchas gracias amigo, finalmente puedo hacer esta consulta, funciona perfectamente en mongo shell. Fui implementado en python en mi aplicación ... Ahora veo que mongodb map/reduce consultas no son iguales a CouchDB map/reduce consultas ... LOL: D – JAM
esta es la consulta implementada en python http://pastebin.com/du8yrk3p: D – JAM
¿Te interesa por qué elegir mapreduce sobre agregación? – UpTheCreek