Използването на map/reduce за тази проста задача е малко като използването на (сравнително бавен) чук за счупване на гайка. рамката за агрегиране основно е измислен за този вид просто агрегиране (и може да направи много повече за вас!):
db.order.aggregate([
{ "$group":{ "_id":"$customer", "orders":{ "$sum": 1 }}},
{ "$out": "order_total"}
])
В зависимост от вашия случай на употреба можете дори да пропуснете $out
сцена и консумират резултатите директно.
> db.orders.aggregate([{ "$group":{ "_id":"$customer", "orders":{ "$sum": 1 }}}])
{ "_id" : "b", "orders" : 2 }
{ "_id" : "a", "orders" : 3 }
Обърнете внимание, че при много големи колекции това най-вероятно не е подходящо, тъй като отнема известно време (но все пак трябва да е по-бързо от операция карта/намаляване).
За да намерите броя на поръчките на един клиент, можете да използвате проста заявка и да използвате cursor.count() метод:
> db.orders.find({ "customer": "a" }).count()
3