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

MongoDB-Aggregation über einen Bereich

Sie können die Aggregation verwenden, um nach allem zu gruppieren, was aus den Quelldokumenten berechnet werden kann, solange Sie genau wissen, was Sie tun möchten.

Basierend auf Ihrem Dokumentinhalt und der Beispielausgabe vermute ich, dass Sie in Intervallen von zwei Tagen summieren. So schreiben Sie eine Aggregation, um dies für Ihre Beispieldaten auszugeben:

var range1={$and:[{"$gte":["$date","2014-07-07"]},{$lte:["$date","2014-07-08"]}]}
var range2={$and:[{"$gte":["$date","2014-07-09"]},{$lte:["$date","2014-07-10"]}]}
db.range.aggregate(
    {$project:{
         dateRange:{$cond:{if:range1, then:"dateRange1",else:{$cond:{if:range2, then:"dateRange2", else:"NotInRange"}}}},
         value:1}
    }, 
    {$group:{_id:"$dateRange", sum:{$sum:"$value"}}}
)
{ "_id" : "dateRange2", "sum" : 45 }
{ "_id" : "dateRange1", "sum" : 49 }

Ersetzen Sie Ihre Daten durch Zeichenfolgen in Bereich1 und Bereich2, und optional können Sie filtern, bevor Sie beginnen, nur Dokumente zu bearbeiten, die sich bereits in den vollständigen Bereichen befinden, über die Sie aggregieren.