MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

agrupe a coleta do MongoDB por mês e agregue a receita para o gráfico de rotatividade/receita


Se bem entendi você quer a receita por cliente e por mês.

O operador $group em uma consulta agregada é exatamente o que você está procurando aqui.
db.orders.aggregate([
    { $group : { 
            _id: { 
                customer_id: "$customer_id",
                month: {$month: "$order_date"}
            },
            revenue: {$sum: "$net_revenue"} 
        }
    }], ... );

Com a consulta acima, um cliente aparecerá mais de uma vez se fizer o pedido em meses separados. Não entendi se era isso que você queria ou não. Se, em vez disso, você deseja o valor total de TODOS os pedidos desse cliente, mas também classificado pela PRIMEIRA vez que ele pediu, faça isso:
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"} 
        }
    }], ... );