जैसा कि आपने पहले ही पाया है, आप उन फ़ील्ड्स पर $match नहीं कर सकते जो दस्तावेज़ में नहीं हैं (यह ठीक उसी तरह काम करता है जो काम ढूंढता है) और यदि आप पहले $project का उपयोग करते हैं तो आप इंडेक्स का उपयोग करने की क्षमता खो देंगे।
इसके बजाय आप क्या कर सकते हैं अपने प्रयासों को इस प्रकार संयोजित करें:
{
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'}
}
}
]
}
उपरोक्त आपको केवल सितंबर के लिए एकत्रीकरण देता है, यदि आप कई महीनों के लिए एकत्र करना चाहते हैं, तो आप उदाहरण के लिए कर सकते हैं:
{
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'}
}
}
]
}
और आपको कुछ इस तरह वापस मिलेगा:
{
"result" : [
{
"_id" : {
"yr" : 2012,
"mo" : 7
},
"totalComments" : 5
},
{
"_id" : {
"yr" : 2012,
"mo" : 8
},
"totalComments" : 19
},
{
"_id" : {
"yr" : 2012,
"mo" : 9
},
"totalComments" : 21
}
],
"ok" : 1
}