MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Agregação do MongoDB em um intervalo


Você pode usar a agregação para agrupar por qualquer coisa que possa ser calculada a partir dos documentos de origem, desde que saiba exatamente o que deseja fazer.

Com base no conteúdo do documento e na saída de amostra, suponho que você esteja somando por intervalos de dois dias. Veja como você escreveria a agregação para gerar isso em seus dados de amostra:
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 }

Substitua suas datas por strings no intervalo1 e intervalo2 e, opcionalmente, você pode filtrar antes de começar a operar apenas em documentos que já estejam nos intervalos completos sobre os quais você está agregando.