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

Aggregazione MongoDb Raggruppa per data

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

Il raggruppamento per data può essere eseguito in due passaggi nel framework di aggregazione, è necessario un terzo passaggio aggiuntivo per ordinare il risultato, se si desidera l'ordinamento:

  1. $project in combinazione con $substr prende i primi 10 caratteri (AAAA:MM:GG) dell'oggetto ISODate da ciascun documento (il risultato è una raccolta di documenti con i campi "_id" e "giorno");
  2. $group gruppi per giorno, sommando (sommando) il numero 1 per ogni documento corrispondente;
  3. $sort ascendente per "_id", che è il giorno dal passaggio precedente dell'aggregazione - questo è facoltativo se si desidera un risultato ordinato.

Questa soluzione non può sfruttare indici come db.twitter.ensureIndex( { TimeStamp: 1 } ) , perché trasforma al volo l'oggetto ISODate in un oggetto stringa. Per raccolte di grandi dimensioni (milioni di documenti) questo potrebbe rappresentare un collo di bottiglia nelle prestazioni e dovrebbero essere utilizzati approcci più sofisticati.