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

Marco de agregación de MongoDB:¿cómo hacer coincidir por rango de fechas, agrupar por días y devolver el promedio para cada día?

El problema parece estar en el _id está utilizando para $ grupo. Debes agrupar por $day en lugar de null , si desea agrupar los resultados por día. Prueba esto:

PriceHourly.aggregate([
    { $match: { date: { $gt: start, $lt: end } } },
    { $group: { _id: "$day", price: { $avg: '$price' } } }
], function(err, results){
    console.log(results); 
});

Dicho esto, no necesita almacenar el día y la hora como elementos separados en el documento. Son datos redundantes. Puedes extraer el day y hour desde date en la consulta de agregación mediante Date Aggregation operadores.