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:
$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");$group
grupper efter dag ved at tilføje (summere) tallet 1 for hvert matchende dokument;$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.