Имея mongodb с объемом около 100 ГБ данных и для каждого поля в выражении $ match, у меня есть индекс (индекс одного поля).
Теперь я попробовал aggregate() и написал $ project как первую часть в конвейере, $ match за этим.
Агрегация работает и возвращает правильные результаты, но это занимает несколько часов! Это действительно обрабатывает только отфильтрованные данные ($ match) или собирает mongo во весь диапазон данных и затем фильтрует?
В моем тестовом случае фильтры соответствия $ соответствуют 150 МБ (вместо полного размера данных 100 ГБ).
Случайно я изменил порядок и написал $ match перед $ project в определении конвейера. Таким образом, это было сделано в течение нескольких секунд.
Когда mongodb обычно сокращает входные данные и также имеет дело с индексом для полей в $ match?
Я нахожу общую структуру настолько поразительной. Возможность упорядочить операторов любым способом, который вам нравится, действительно открывает миры возможностей. Этот ответ помог мне понять, что я могу '$ match' после' $ project', таким образом, я мог бы фильтровать поля после '$ project'. – Rohmer