Как использовать операторы агрегирования в $ match в MongoDB (например, $ year или $ dayOfMonth)?

У меня есть коллекция документов с атрибутом create_date. Я хотел бы отправить эти документы через конвейер агрегации, чтобы поработать над ними. В идеале я хотел бы отфильтровать их, используя $ match, прежде чем выполнять какую-либо другую работу с ними, чтобы я мог воспользоваться индексами, однако я не могу понять, как использовать новые операторы $ year / $ month / $ dayOfMonth в моем $ match expression.

Существует несколько примеров использования операторов в операции $ project, но я обеспокоен тем, что, поместив $ project в качестве первого шага в моем конвейере, я утратил доступ к своим индексам (документация MongoDB указывает на то, что первое выражение должно быть $ match для использования индексов).

Пример данных:

{
    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
}

Я хотел бы провести это через конвейер агрегации, чтобы получить общие комментарии ко всем сообщениям, сделанным в сентябре

{
    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'}
             }
          }
    ]
 }

Это работает, но совпадение теряет доступ к любым индексам для более сложных запросов:

{
    aggregate: 'posts',
    pipeline: [
         {$project:
              {
                   month : {$month:'$created_date'},
                   year : {$year:'$created_date'}
              }
         },
         {$match:
              {
                   month:9,
                   year: 2012
               }
         },
         {$group:
             {_id: '0',
              totalComments:{$sum:'$comments'}
             }
          }
    ]
 }

Ответы на вопрос(3)

Ваш ответ на вопрос