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:
$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");$group
groepen per dag, waarbij het nummer 1 wordt toegevoegd (opgeteld) voor elk overeenkomend document;$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.