sql >> Database >  >> NoSQL >> MongoDB

MongoDB-aggregatie over een bereik

U kunt aggregatie gebruiken om te groeperen op alles wat kan worden berekend uit de brondocumenten, zolang u maar precies weet wat u wilt doen.

Op basis van uw documentinhoud en voorbeelduitvoer, vermoed ik dat u optelt met intervallen van twee dagen. Hier is hoe u aggregatie zou schrijven om dit op uw voorbeeldgegevens uit te voeren:

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 }

Vervang uw datums door tekenreeksen in bereik1 en bereik2 en optioneel kunt u filteren voordat u begint om alleen te werken op documenten die zich al in de volledige reeksen bevinden waarover u aggregeert.




  1. Hoe gaat `mongoose` om met het toevoegen van documenten met VELDEN die __NOT__ deel uitmaken van het schema?

  2. NoSQL-gegevensstreaming met MongoDB en Kafka

  3. Mongoid 3 - toegang tot map_reduce resultaten

  4. Hoe haal ik de aangemaakte datum uit een Mongo ObjectID