sql >> Databasteknik >  >> NoSQL >> MongoDB

grupp MongoDB-insamling efter månad och aggregerad intäkt för churn/intäktsdiagram

Om jag förstår det rätt vill du ha intäkterna per kund och per månad.

Operatorn $group i en samlad fråga är precis vad du letar efter här.

db.orders.aggregate([
    { $group : { 
            _id: { 
                customer_id: "$customer_id",
                month: {$month: "$order_date"}
            },
            revenue: {$sum: "$net_revenue"} 
        }
    }], ... );

Med ovanstående fråga kommer en kund att dyka upp mer än en gång om de beställer på separata månader. Jag förstod inte om det var det du ville eller inte. Om du istället vill ha det totala värdet för ALLA beställningar från den kunden, men även sorterade efter den FÖRSTA gången de någonsin beställde, gör du så här istället:

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



  1. Finns det något sätt att begränsa antalet poster i en viss samling

  2. Hur får man array från mongoDB-samlingen?

  3. Hur kan jag ändra _id-fältet i MongoDB Collection till User_id?

  4. Fråga på MongoDB Delete Triggers