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

Estrutura de agregação do MongoDB - Como corresponder por intervalo de datas, agrupar por dias e retornar a média para cada dia?


O problema parece estar com o _id você está usando para $group. Você deve agrupar por $day em vez de null , se desejar agrupar os resultados por dia. Tente isto:
PriceHourly.aggregate([
    { $match: { date: { $gt: start, $lt: end } } },
    { $group: { _id: "$day", price: { $avg: '$price' } } }
], function(err, results){
    console.log(results); 
});

Dito isso, você não precisa armazenar o dia e a hora como elementos separados no documento. São dados redundantes. Você pode extrair o day e hour de date campo na consulta de agregação usando a Date Aggregation operadores.