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

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

Есть несколько примеров того, как использовать операторы в операции $ 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)

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