MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

raccolta di gruppo MongoDB per mese e entrate aggregate per grafico abbandono/ricavi

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"} 
        }
    }], ... );