У меня есть довольно небольшой набор данных 63K документов (2.5GB всего). Пример документа:
{
_id : "[uniqueId]",
FormId : 10,
Name : "Name of form",
IsComplete : true,
Sections : [ many sections and can be large ]
}
Я хочу получить общее количество документов по FormId. Я получаю быстрый результат (.15sec) по данному запросу:
db.getCollection('collection').aggregate([
{ $sort : { FormId : 1 } }, //Index exists on FormId
{ $group : { _id : "$FormId", count : { $sum : 1 } } },
{ $sort : { "count" : -1 } }
])
Моя проблема в том, мне нужно, чтобы получить количество документов, где { «IsComplete»: истинные}. У меня есть 2 индекса, построенных на обоих свойствах, но я понимаю, что использование оператора $ match сканирует все документы. Итак, как эффективно фильтровать счетчик $ group?
Здесь не требуется первый этап '$ sort'. – styvane
@ Стыване без $ sort stage $ group требуется 10 секунд. Почему это произойдет? Начиная с $ sort использует индекс. – JayJohnsonDesigns