Трубопровод агрегации 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, перечислены здесь .