Używanie mapy/redukcji do tego prostego zadania jest trochę jak używanie (stosunkowo wolnego) młota kowalskiego do rozłupywania orzecha. struktura agregacji został wynaleziony do tego rodzaju prostej agregacji (i może zrobić dla Ciebie o wiele więcej!):
db.order.aggregate([
{ "$group":{ "_id":"$customer", "orders":{ "$sum": 1 }}},
{ "$out": "order_total"}
])
W zależności od przypadku użycia możesz nawet pominąć $out
etap i bezpośrednio skonsumować wyniki.
> db.orders.aggregate([{ "$group":{ "_id":"$customer", "orders":{ "$sum": 1 }}}])
{ "_id" : "b", "orders" : 2 }
{ "_id" : "a", "orders" : 3 }
Zwróć uwagę, że w przypadku bardzo dużych kolekcji najprawdopodobniej nie jest to odpowiednie, ponieważ zajmuje to trochę czasu (ale nadal powinno być szybsze niż operacja mapowania/zmniejszania).
Aby znaleźć liczbę zamówień jednego klienta, możesz użyć prostego zapytania i użyć kursor.count() metoda:
> db.orders.find({ "customer": "a" }).count()
3