MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Exécutez la réduction de la carte pour toutes les clés des collections - mongodb

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