MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Agrégation MongoDB sur une plage

Vous pouvez utiliser l'agrégation pour regrouper tout ce qui peut être calculé à partir des documents source, tant que vous savez exactement ce que vous voulez faire.

Sur la base du contenu de votre document et de l'exemple de sortie, je suppose que vous additionnez par intervalles de deux jours. Voici comment vous écririez une agrégation pour générer ceci sur vos exemples de données :

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 }

Remplacez vos dates par des chaînes dans range1 et range2 et vous pouvez éventuellement filtrer avant de commencer à n'opérer que sur les documents qui sont déjà dans les plages complètes sur lesquelles vous agrégez.