MongoDB агрегация: $limit, $match, $group

Этот пример демонстрирует использование оператора $limit для выборочной агрегации. Выборочная агрегация позволяет обрабатывать подмножество коллекции, ускоряя запрос, особенно при больших объёмах данных.

Выборочная агрегация

Этот пример использует $limit для обработки первых ста документов коллекции persons. Далее применяются $match и $group.

  • $limit: 100: Ограничивает обработку первыми 100 документами.
  • $match: Фильтрует документы, оставляя те, где age > 27.
  • $group: Группирует оставшиеся документы по company, location и country.

Результат – список из четырёх стран. Хотя в этом примере результат совпадает с агрегацией по всей коллекции, это не всегда так. Выборочная агрегация может давать отличающиеся результаты в зависимости от данных.

Агрегация без $limit

Рассмотрим агрегационный запрос без $limit. Обрабатывается вся коллекция persons (1000 документов). Запрос выполняет:

  1. Обработку всех документов коллекции persons.
  2. $match: Фильтрацию документов, оставляя те, где eyeColor ≠ brown.
  3. $group: Группировку документов по eyeColor и favoriteFruit.
  4. $sort: Сортировку результатов по eyeColor, затем по favoriteFruit.

Результат – шесть возможных пар значений eyeColor и favoriteFruit.

Добавление $limit

Добавим $limit перед $match:

{
  "$limit": 100
}

Это обрабатывает только первые 100 документов. Результат – те же шесть пар значений. В этом случае выборка из 100 документов представительна для всей коллекции. Однако, это не гарантируется и зависит от распределения данных. В других случаях результаты выборочной и полной агрегации могут отличаться.

$limit в агрегации ускоряет обработку больших коллекций, обрабатывая подмножество документов. Это может изменить результаты по сравнению с агрегацией по всей коллекции, но в некоторых случаях результаты совпадают. Важно понимать, что выборка может быть не репрезентативной, и результаты могут отличаться в зависимости от данных.

Что будем искать? Например,программа