MongoDB $project: Перестройка документов в агрегации

Оператор $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 позволяет не только фильтровать поля (включать/исключать), но и перестраивать структуру документов, создавая новые поля и вложенные документы.

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