sql >> Base de Datos >  >> NoSQL >> MongoDB

Agregación de MongoDB en un rango

Puede usar la agregación para agrupar por cualquier cosa que se pueda calcular a partir de los documentos de origen, siempre que sepa exactamente lo que quiere hacer.

Según el contenido de su documento y la salida de muestra, supongo que está sumando en intervalos de dos días. Así es como escribiría la agregación para generar esto en sus datos de muestra:

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 }

Sustituya sus fechas por cadenas en el rango 1 y el rango 2 y, opcionalmente, puede filtrar antes de comenzar a operar solo en documentos que ya están en los rangos completos sobre los que está agregando.