Att använda en karta/förminska för den enkla uppgiften är lite som att använda en (jämförelsevis långsam) slägga för att knäcka en nöt. aggregationsramverket uppfanns i grunden för den här typen av enkel aggregering (och kan göra mycket mer för dig!):
db.order.aggregate([
{ "$group":{ "_id":"$customer", "orders":{ "$sum": 1 }}},
{ "$out": "order_total"}
])
Beroende på ditt användningsfall kan du till och med utelämna $out
steg och konsumerar resultaten direkt.
> db.orders.aggregate([{ "$group":{ "_id":"$customer", "orders":{ "$sum": 1 }}}])
{ "_id" : "b", "orders" : 2 }
{ "_id" : "a", "orders" : 3 }
Observera att med mycket stora samlingar är detta med största sannolikhet inte lämpligt, eftersom det tar ett tag (men det bör fortfarande vara snabbare än en kart-/reduceringsoperation).
För att hitta antalet beställningar för en enskild kund kan du använda en enkel fråga och använda cursor.count() metod:
> db.orders.find({ "customer": "a" }).count()
3