KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I have a collection full of documents with a created_date attribute. I'd like to send these documents through an aggregation pipeline to do some work on them. Ideally I would like to filter them using a $match before I do any other work on them so that I can take advantage of indexes however I can't figure out how to use the new $year/$month/$dayOfMonth operators in my $match expression. There are a few examples floating around of how to use the operators in a $project operation but I'm concerned that by placing a $project as the first step in my pipeline then I've lost access to my indexes (MongoDB documentation indicates that the first expression must be a $match to take advantage of indexes). Sample data: { post_body: 'This is the body of test post 1', created_date: ISODate('2012-09-29T05:23:41Z') comments: 48 } { post_body: 'This is the body of test post 2', created_date: ISODate('2012-09-24T12:34:13Z') comments: 10 } { post_body: 'This is the body of test post 3', created_date: ISODate('2012-08-16T12:34:13Z') comments: 10 } I'd like to run this through an aggregation pipeline to get the total comments on all posts made in September { aggregate: 'posts', pipeline: [ {$match: /*Can I use the $year/$month operators here to match Sept 2012? $year:created_date : 2012, $month:created_date : 9 */ /*or does this have to be created_date : {$gte:{$date:'2012-09-01T04:00:00Z'}, $lt: {$date:'2012-10-01T04:00:00Z'} } */ }, {$group: {_id: '0', totalComments:{$sum:'$comments'} } } ] } This works but the match loses access to any indexes for more complicated queries: { aggregate: 'posts', pipeline: [ {$p
Tags (comma-separated)
Save Edits
Cancel