Оператор $project в агрегации MongoDB используется для выбора и преобразования полей в выходных документах.
Пример: выбор полей
Входные документы содержат поля _id, name и company.location.country. Цель — получить выходные документы, содержащие только эти три поля. Для этого используется следующий код:
{ $project: { _id: 1, name: 1, "company.location.country": 1 } }
Результат:
{ "_id": ..., "name": ..., "company.location.country": ... }
Обратите внимание на вложенное поле company.location.country. Значение 1 указывает на включение поля в результат.
Исключение поля _id
Для исключения поля _id из выходных документов используется значение 0:
{ $project: { _id: 0, isActive: 1, name: 1, gender: 1 } }
Установка _id: 0 исключает это поле из результата.
Исключение полей со значением 0
Важно отметить, что оператор $project не исключает поля, если хотя бы одно значение в этом поле отлично от 0. Исключение происходит только если все значения поля равны 0.
Расположение в агрегационной цепочке
Обычно этап $project следует за этапом $match, но может быть размещен и в других позициях агрегационной цепочки.
Переименование и преобразование полей
Оператор $project позволяет не только выбирать поля, но и переименовывать их, а также изменять структуру документов. Более сложные примеры покажут эти возможности.