MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB Aggregation Framework – Wie kann man nach Datumsbereich abgleichen, nach Tagen gruppieren und den Durchschnitt für jeden Tag zurückgeben?

Das Problem scheint bei der _id zu liegen Sie verwenden für $group. Sie sollten nach $day gruppieren statt null , wenn Sie die Ergebnisse nach Tag gruppieren möchten. Versuchen Sie Folgendes:

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

Allerdings müssen Sie den Tag und die Uhrzeit nicht als separate Elemente im Dokument speichern. Es sind redundante Daten. Sie können den day extrahieren und hour ab date Feld in der Aggregationsabfrage unter Verwendung der Date Aggregation Betreiber.