Oui, MapReduce fonctionnerait. Vous pouvez également utiliser des curseurs pour traiter un résultat de requête. Comme :
min = 99999999;
max = -99999999;
sum = 0;
count = 0
db.School.find({}).forEach(function(s) {
if (s.first.events.first.cost < min)
min = s.first.events.first.cost;
if (s.first.events.first.cost > max)
max = s.first.events.first.cost;
sum += s.first.events.first.cost;
++count;
});
Vous avez maintenant le min et le max et pouvez calculer la moyenne et la moyenne à partir de la somme et du décompte.
Mongodb n'a pas la capacité de calculer directement les fonctions d'agrégation dans son langage de requête. En fait, cette affirmation n'est pas entièrement vraie, car il existe la fonction count() pour compter le nombre de résultats renvoyés par une requête, et il existe la fonction group(). Mais la fonction de groupe ressemble beaucoup à un MapReduce et ne peut pas être utilisée sur des bases de données partitionnées. Si vous êtes intéressé par la fonction de groupe, consultez :http://www. mongodb.org/display/DOCS/Aggregation#Aggregation-Group