sql >> Database >  >> NoSQL >> MongoDB

MongoDb-aggregatie Groeperen op datum

db.foos.aggregate(
    [   
        {   $project : { day : {$substr: ["$TimeStamp", 0, 10] }}},        
        {   $group   : { _id : "$day",  number : { $sum : 1 }}},
        {   $sort    : { _id : 1 }}        
    ]
)

Groeperen op datum kan in twee stappen in het aggregatieraamwerk, een extra derde stap is nodig om het resultaat te sorteren, als sorteren gewenst is:

  1. $project in combinatie met $substr neemt de eerste 10 tekens (JJJJ:MM:DD) van het ISODate-object van elk document (het resultaat is een verzameling documenten met de velden "_id" en "dag");
  2. $group groepen per dag, waarbij het nummer 1 wordt toegevoegd (opgeteld) voor elk overeenkomend document;
  3. $sort oplopend met "_id", wat de dag is vanaf de vorige aggregatiestap - dit is optioneel als gesorteerd resultaat gewenst is.

Deze oplossing kan geen gebruik maken van indexen zoals db.twitter.ensureIndex( { TimeStamp: 1 } ) , omdat het het ISODate-object on-the-fly transformeert in een string-object. Voor grote collecties (miljoenen documenten) kan dit een prestatieknelpunt zijn en moeten meer geavanceerde benaderingen worden gebruikt.



  1. Binnen de nieuwe ondersteuning van Apache HBase voor MOB's

  2. Hoeveel sneller is Redis dan mongoDB?

  3. MongoDB - enorme hoeveelheid MongoCleaner-threads

  4. Redis Client List doel en beschrijving