sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB-aggregation över ett intervall

Du kan använda aggregering för att gruppera efter vad som helst som kan beräknas från källdokumenten, så länge du vet exakt vad du vill göra.

Baserat på ditt dokumentinnehåll och exempelutdata, gissar jag att du summerar med två dagars intervall. Så här skulle du skriva aggregering för att mata ut detta på dina exempeldata:

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 }

Ersätt dina datum med strängar i intervall 1 och intervall 2 och eventuellt kan du filtrera innan du börjar använda endast dokument som redan ligger inom hela intervallet du samlar över.




  1. MongoDB Aggregate Time Series

  2. Infoga dokument i MongoDB endast om alla fält är unika

  3. Använd javascript-variabeln som ett värde för $regex i MongoDB-frågan

  4. Lumen och MongoDB?