MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

regrouper la collecte MongoDB par mois et les revenus agrégés pour le graphique de désabonnement/revenus

Si je comprends bien, vous voulez le chiffre d'affaires par client et par mois.

L'opérateur $group dans une requête agrégée est exactement ce que vous recherchez ici.

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

Avec la requête ci-dessus, un client apparaîtra plus d'une fois s'il commande sur des mois distincts. Je n'ai pas compris si c'était ce que tu voulais ou non. Si, à la place, vous souhaitez obtenir la valeur totale de TOUTES les commandes de ce client, mais triées également en fonction de la PREMIÈRE fois qu'il a commandé, procédez comme suit :

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