Оператор $project в агрегации MongoDB используется для перестройки структуры документов. Рассмотрим пример преобразования документов из коллекции persons.
Работа оператора $project
$project обрабатывает каждый документ независимо. Входной набор из 1000 документов преобразуется в выходной набор из 1000 документов. В примере будут проектироваться следующие поля:
- _id: исключается (значение 0).
- name: включается.
- info: создаётся новое поле, содержащее вложенный документ с полями eyes, fruit, и country. Значения берутся из полей eyeColor, favoriteFood и company.location.country соответственно.
Результат — документы с полями name и info, где info — вложенный документ. Это позволяет выбрать и структурировать необходимые поля из больших документов.
Практический пример
После этапа агрегации используется оператор $project. Структура нового документа:
- _id: 0 (исключается)
- index: 1 (включается)
- name: 1 (включается)
- info: новый вложенный документ со свойствами:
- eyes: Ссылка на поле eyeColor входного документа ($eyeColor).
- company: Ссылка на поле company.title входного документа ($company.title).
- country: Ссылка на поле company.location.country входного документа ($company.location.country).
Результирующие документы будут содержать поля index, name и info, где info — вложенный документ с полями eyes, company и country. Значения берутся из соответствующих полей входных документов.
$project позволяет не только фильтровать поля (включать/исключать), но и перестраивать структуру документов, создавая новые поля и вложенные документы.