sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDb-sammenlægning Gruppér efter dato

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

Gruppering efter dato kan udføres i to trin i aggregeringsrammen, et yderligere tredje trin er nødvendigt for at sortere resultatet, hvis sortering ønskes:

  1. $project i kombination med $substr tager de første 10 tegn (ÅÅÅÅ:MM:DD) af ISODate-objektet fra hvert dokument (resultatet er en samling dokumenter med felterne "_id" og "day");
  2. $group grupper efter dag ved at tilføje (summere) tallet 1 for hvert matchende dokument;
  3. $sort stigende med "_id", som er dagen fra det forrige aggregeringstrin - dette er valgfrit, hvis sorteret resultat ønskes.

Denne løsning kan ikke drage fordel af indekser som db.twitter.ensureIndex( { TimeStamp: 1 } ) , fordi det transformerer ISODate-objektet til et strengobjekt i farten. For store samlinger (millioner af dokumenter) kan dette være en præstationsflaskehals, og mere sofistikerede tilgange bør anvendes.



  1. mangust adskilt og fyldt med dokumenter

  2. Mongoose opdaterer ikke mit dokument, hvis jeg ikke har nogen tilbagekaldsfunktion

  3. MongoDB mongoose underdokumenter oprettet to gange

  4. Hvordan opdaterer du flere felter ved hjælp af Update.Set i MongoDB ved hjælp af den officielle c#-driver?