Als ik het goed begrijp wil je de omzet per klant en per maand.
De operator $group in een samengestelde zoekopdracht is precies wat u hier zoekt.
db.orders.aggregate([
{ $group : {
_id: {
customer_id: "$customer_id",
month: {$month: "$order_date"}
},
revenue: {$sum: "$net_revenue"}
}
}], ... );
Met de bovenstaande vraag zal een klant meer dan eens verschijnen als hij in verschillende maanden bestelt. Ik begreep niet of je dat wilde of niet. Als u in plaats daarvan de totale waarde voor ALLE bestellingen van die klant wilt, maar ook wilt sorteren op de EERSTE keer dat ze ooit hebben besteld, doet u dit in plaats daarvan:
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"}
}
}], ... );