db.foos.aggregate(
[
{ $project : { day : {$substr: ["$TimeStamp", 0, 10] }}},
{ $group : { _id : "$day", number : { $sum : 1 }}},
{ $sort : { _id : 1 }}
]
)
Pengelompokan menurut tanggal dapat dilakukan dalam dua langkah dalam kerangka agregasi, langkah ketiga tambahan diperlukan untuk menyortir hasil, jika pengurutan diinginkan:
$project
dalam kombinasi dengan$substr
mengambil 10 karakter pertama (YYYY:MM:DD) dari objek ISODate dari setiap dokumen (hasilnya adalah kumpulan dokumen dengan bidang "_id" dan "hari");$group
kelompok menurut hari, menambahkan (menjumlahkan) nomor 1 untuk setiap dokumen yang cocok;$sort
menaik dengan "_id", yang merupakan hari dari langkah agregasi sebelumnya - ini opsional jika diinginkan hasil yang diurutkan.
Solusi ini tidak dapat memanfaatkan indeks seperti db.twitter.ensureIndex( { TimeStamp: 1 } )
, karena mengubah objek ISODate menjadi objek string dengan cepat. Untuk koleksi besar (jutaan dokumen) ini bisa menjadi hambatan kinerja dan pendekatan yang lebih canggih harus digunakan.