Этот пример демонстрирует использование оператора $limit для выборочной агрегации. Выборочная агрегация позволяет обрабатывать подмножество коллекции, ускоряя запрос, особенно при больших объёмах данных.
Выборочная агрегация
Этот пример использует $limit для обработки первых ста документов коллекции persons. Далее применяются $match и $group.
- $limit: 100: Ограничивает обработку первыми 100 документами.
- $match: Фильтрует документы, оставляя те, где age > 27.
- $group: Группирует оставшиеся документы по company, location и country.
Результат – список из четырёх стран. Хотя в этом примере результат совпадает с агрегацией по всей коллекции, это не всегда так. Выборочная агрегация может давать отличающиеся результаты в зависимости от данных.
Агрегация без $limit
Рассмотрим агрегационный запрос без $limit. Обрабатывается вся коллекция persons (1000 документов). Запрос выполняет:
- Обработку всех документов коллекции persons.
- $match: Фильтрацию документов, оставляя те, где eyeColor ≠ brown.
- $group: Группировку документов по eyeColor и favoriteFruit.
- $sort: Сортировку результатов по eyeColor, затем по favoriteFruit.
Результат – шесть возможных пар значений eyeColor и favoriteFruit.
Добавление $limit
Добавим $limit перед $match:
{
"$limit": 100
}
Это обрабатывает только первые 100 документов. Результат – те же шесть пар значений. В этом случае выборка из 100 документов представительна для всей коллекции. Однако, это не гарантируется и зависит от распределения данных. В других случаях результаты выборочной и полной агрегации могут отличаться.
$limit в агрегации ускоряет обработку больших коллекций, обрабатывая подмножество документов. Это может изменить результаты по сравнению с агрегацией по всей коллекции, но в некоторых случаях результаты совпадают. Важно понимать, что выборка может быть не репрезентативной, и результаты могут отличаться в зависимости от данных.