Jeśli dobrze rozumiem, chcesz uzyskać przychód według klienta i według miesiąca.
Operator $group w zapytaniu zbiorczym jest dokładnie tym, czego tutaj szukasz.
db.orders.aggregate([
{ $group : {
_id: {
customer_id: "$customer_id",
month: {$month: "$order_date"}
},
revenue: {$sum: "$net_revenue"}
}
}], ... );
Przy powyższym zapytaniu klient pojawi się więcej niż raz, jeśli złoży zamówienie w oddzielnych miesiącach. Nie rozumiałem, czy tego chciałeś, czy nie. Jeśli zamiast tego chcesz uzyskać całkowitą wartość WSZYSTKICH zamówień od tego klienta, ale posortowaną również według PIERWSZEGO zamówienia, zrób to:
db.orders.aggregate([
{ $sort: { order_date : 1 } }, //order by date so that $first is correct
{ $group : {
_id: {
customer_id: "$customer_id",
},
month: { $first: {$month: "$order_date"} }
revenue: {$sum: "$net_revenue"}
}
}], ... );