Het gebruik van een kaart/verkleining voor die eenvoudige taak is een beetje zoals het gebruik van een (relatief langzame) voorhamer om een noot te kraken. Het aggregatieraamwerk is eigenlijk uitgevonden voor dit soort eenvoudige aggregatie (en kan nog veel meer voor u doen!):
db.order.aggregate([
{ "$group":{ "_id":"$customer", "orders":{ "$sum": 1 }}},
{ "$out": "order_total"}
])
Afhankelijk van uw gebruikssituatie kunt u zelfs de $out
. weglaten stadium en consumeer de resultaten direct.
> db.orders.aggregate([{ "$group":{ "_id":"$customer", "orders":{ "$sum": 1 }}}])
{ "_id" : "b", "orders" : 2 }
{ "_id" : "a", "orders" : 3 }
Houd er rekening mee dat dit bij zeer grote collecties hoogstwaarschijnlijk niet geschikt is, omdat het even kan duren (maar het zou nog steeds sneller moeten zijn dan een kaart-/verkleiningsbewerking).
Om het aantal bestellingen van een enkele klant te vinden, kunt u een eenvoudige zoekopdracht gebruiken en de cursor.count() methode:
> db.orders.find({ "customer": "a" }).count()
3