sql >> Base de Datos >  >> NoSQL >> MongoDB

agrupar la colección de MongoDB por mes e ingresos agregados para el gráfico de abandono/ingresos

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