Utiliser une carte/réduire pour cette tâche simple, c'est un peu comme utiliser un marteau (relativement lent) pour casser une noix. Le framework d'agrégation a été inventé pour ce type d'agrégation simple (et peut faire beaucoup plus pour vous !) :
db.order.aggregate([
{ "$group":{ "_id":"$customer", "orders":{ "$sum": 1 }}},
{ "$out": "order_total"}
])
Selon votre cas d'utilisation, vous pouvez même omettre le $out
mettre en scène et consommer directement les résultats.
> db.orders.aggregate([{ "$group":{ "_id":"$customer", "orders":{ "$sum": 1 }}}])
{ "_id" : "b", "orders" : 2 }
{ "_id" : "a", "orders" : 3 }
Notez qu'avec de très grandes collections, cela ne convient probablement pas, car cela prend du temps (mais cela devrait toujours être plus rapide qu'une opération de mappage/réduction).
Pour trouver le nombre de commandes d'un seul client, vous pouvez utiliser une requête simple et utiliser le curseur.count() méthode :
> db.orders.find({ "customer": "a" }).count()
3