Статьи

Введение в агрегатный конвейер MongoDB

Трубопровод агрегации MongoDB является основой для агрегирования данных. Он создан по образцу концепции конвейеров обработки данных. Документы поступают в многоступенчатый конвейер, который преобразует документы в агрегированные результаты. Он был введен в MongoDB 2.2 для выполнения операций агрегации без необходимости использования map-Reduce.

Агрегационный трубопровод

  • $ Матч и $ сортировать операторы трубопроводов могут воспользоваться индексом , когда они происходят в начале трубопровода [ Reference ].
  • Нет ограничений на размер результата, так как курсор возвращается [ Ссылка ].
  • Вывод может быть возвращен встроенным или записан в коллекцию [ Ссылка ].
  • Этапы конвейера имеют ограничение в 100 МБ ОЗУ. Для обработки больших наборов данных используйте параметр allowDiskUse [ Ссылка ].
  • Агрегационный конвейер имеет фазу оптимизации, которая пытается изменить форму конвейера для повышения производительности [ Ссылка ].

Для большинства операций агрегации конвейер агрегации обеспечивает лучшую производительность и более согласованный интерфейс. Однако операции сокращения карты обеспечивают некоторую гибкость, которая в настоящее время недоступна в конвейере агрегации.

Синтаксис для конвейера агрегации

db.collection.aggregate( [ { <stage> }, ... ] )

Этапы

Агрегационный конвейер MongoDB состоит из этапов . Каждый этап трансформирует документы по мере их прохождения по конвейеру. Для этапов конвейера не требуется создавать один выходной документ для каждого входного документа; Например, некоторые этапы могут генерировать новые документы или фильтровать документы. Этапы конвейера могут появляться в конвейере несколько раз.

Различные операторы сцены, поддерживаемые MongoDB, перечислены ниже.

имя Описание
$ geoNear Возвращает упорядоченный поток документов на основе близости к геопространственной точке. Включает в себя функциональность $ match , $ sort и $ limit для геопространственных данных. Выходные документы включают в себя дополнительное поле расстояния и могут включать поле идентификатора местоположения.
$ группа Группирует входные документы по указанному выражению идентификатора и применяет выражение (я) аккумулятора, если указано, к каждой группе. Потребляет все входные документы и выводит один документ на каждую отдельную группу. Выходные документы содержат только поле идентификатора и, если указано, накопленные поля.
$ предел Передает первые n документов без изменений в конвейер, где n — указанный предел. Для каждого входного документа выводится либо один документ (для первых n документов), либо ноль документов (после первых n документов).
$ матч Фильтрует поток документов, чтобы только соответствующие документы могли пройти без изменений на следующем этапе конвейера. $ match использует стандартные запросы MongoDB. Для каждого входного документа выводится один документ (совпадение) или ноль документов (без совпадения).
$ из Записывает полученные документы конвейера агрегации в коллекцию. Чтобы использовать этап $ out , он должен быть последним этапом в конвейере.
$ проект Изменяет каждый документ в потоке, например, добавляя новые поля или удаляя существующие поля. Для каждого входного документа выводится один документ.
$ красноломкий Изменяет каждый документ в потоке, ограничивая содержимое каждого документа на основе информации, хранящейся в самих документах. Включает в себя функциональность $ project и $ match . Может использоваться для реализации редактирования на уровне поля. Для каждого входного документа выводится либо один, либо нулевой документ.
$ пропуск Пропускает первые n документов, где n — указанный номер пропуска, и передает оставшиеся документы без изменений в конвейер. Для каждого входного документа выводится либо ноль документов (для первых n документов), либо один документ (если после первых n документов).
$ сортировать Изменение порядка потока документов по указанному ключу сортировки. Меняется только порядок; документы остаются без изменений. Для каждого входного документа выводится один документ.
$ размотки Деконструирует поле массива из входных документов для вывода документа для каждого элемента. Каждый выходной документ заменяет массив значением элемента. Для каждого входного документа выводит n документов, где n — количество элементов массива и может быть нулем для пустого массива.

Различные выражения, поддерживаемые MongoDB, перечислены здесь .