Si entiendo correctamente, desea los ingresos por cliente y por mes.
El operador $group en una consulta agregada es exactamente lo que está buscando aquí.
db.orders.aggregate([
{ $group : {
_id: {
customer_id: "$customer_id",
month: {$month: "$order_date"}
},
revenue: {$sum: "$net_revenue"}
}
}], ... );
Con la consulta anterior, un cliente aparecerá más de una vez si realiza pedidos en meses separados. No entendí si eso es lo que querías o no. Si, en cambio, desea obtener el valor total de TODOS los pedidos de ese cliente, pero ordenados también por la PRIMERA vez que realizó el pedido, haga lo siguiente:
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"}
}
}], ... );