Seperti yang sudah Anda temukan, Anda tidak dapat $match pada bidang yang tidak ada dalam dokumen (ini bekerja dengan cara yang persis sama dengan find works) dan jika Anda menggunakan $project terlebih dahulu maka Anda akan kehilangan kemampuan untuk menggunakan indeks.
Yang dapat Anda lakukan adalah menggabungkan upaya Anda sebagai berikut:
{
aggregate: 'posts',
pipeline: [
{$match: {
created_date :
{$gte:{$date:'2012-09-01T04:00:00Z'},
$lt: {date:'2012-10-01T04:00:00Z'}
}}
}
},
{$group:
{_id: '0',
totalComments:{$sum:'$comments'}
}
}
]
}
Di atas hanya memberi Anda agregasi untuk bulan September, jika Anda ingin menggabungkan untuk beberapa bulan, Anda dapat misalnya:
{
aggregate: 'posts',
pipeline: [
{$match: {
created_date :
{ $gte:'2012-07-01T04:00:00Z',
$lt: '2012-10-01T04:00:00Z'
}
},
{$project: {
comments: 1,
new_created: {
"yr" : {"$year" : "$created_date"},
"mo" : {"$month" : "$created_date"}
}
}
},
{$group:
{_id: "$new_created",
totalComments:{$sum:'$comments'}
}
}
]
}
dan Anda akan mendapatkan kembali sesuatu seperti:
{
"result" : [
{
"_id" : {
"yr" : 2012,
"mo" : 7
},
"totalComments" : 5
},
{
"_id" : {
"yr" : 2012,
"mo" : 8
},
"totalComments" : 19
},
{
"_id" : {
"yr" : 2012,
"mo" : 9
},
"totalComments" : 21
}
],
"ok" : 1
}