MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Aggregazione MongoDB su un intervallo

Puoi utilizzare l'aggregazione per raggruppare in base a tutto ciò che può essere calcolato dai documenti di origine, purché tu sappia esattamente cosa vuoi fare.

In base al contenuto del documento e all'output di esempio, suppongo che tu stia sommando a intervalli di due giorni. Ecco come scriveresti l'aggregazione per ottenere questo risultato sui tuoi dati di esempio:

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 }

Sostituisci le tue date con le stringhe nell'intervallo1 e nell'intervallo2 e facoltativamente puoi filtrare prima di iniziare a operare solo su documenti che sono già negli intervalli completi su cui stai aggregando.