sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDb-aggregation Gruppera efter datum

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

Gruppera efter datum kan göras i två steg i aggregeringsramverket, ytterligare ett tredje steg behövs för att sortera resultatet, om sortering önskas:

  1. $project i kombination med $substr tar de första 10 tecknen (ÅÅÅÅ:MM:DD) i ISODate-objektet från varje dokument (resultatet är en samling dokument med fälten "_id" och "day");
  2. $group grupperar efter dag, lägger till (summerar) siffran 1 för varje matchande dokument;
  3. $sort stigande med "_id", vilket är dagen från föregående aggregeringssteg - detta är valfritt om sorterat resultat önskas.

Denna lösning kan inte dra fördel av index som db.twitter.ensureIndex( { TimeStamp: 1 } ) , eftersom det transformerar ISODate-objektet till ett strängobjekt i farten. För stora samlingar (miljontals dokument) kan detta vara en prestandaflaskhals och mer sofistikerade metoder bör användas.



  1. Spring Boot anslut Mysql och MongoDb

  2. Hur man startar redis-server på en annan port än standardporten 6379 i ubuntu

  3. LogicException:Se till att PHP Redis-tillägget är installerat och aktiverat

  4. Kan meteor mongo förare hantera $each och $position operatorer?