Se ho capito bene, vuoi le entrate per cliente e per mese.
L'operatore $group in una query aggregata è esattamente quello che stai cercando qui.
db.orders.aggregate([
{ $group : {
_id: {
customer_id: "$customer_id",
month: {$month: "$order_date"}
},
revenue: {$sum: "$net_revenue"}
}
}], ... );
Con la query di cui sopra, un cliente apparirà più di una volta se ordina in mesi separati. Non ho capito se è quello che volevi o no. Se invece desideri il valore totale di TUTTI gli ordini di quel cliente, ma ordinato anche in base alla PRIMA volta che ha ordinato, procedi come segue:
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"}
}
}], ... );