Для того, чтобы вытянуть пользователей вместе с их любимыми фильмами, воспользуемся aggregate:
userModel.aggregate([
{
$lookup:
{
// название колекции фильмов
from: "films", // название колекции, а не модели!!!!
// поле в колекции пользователей, которое содержит id любимых фильмов
localField: "favouriteFilmIds",
// поле в колекции фильмов, которое должно отвечать id фильмов в
// коллекции пользователей
foreignField: "_id",
// как поле с документами фильмов будет называтся
as: "favouriteFilms"
}
}
])
Помимо оператора $ lookup для вытягивания взаимосвязанных данных из разных коллекций, в aggregate есть еще много других операторов.
Для выполнения этих действий одно за другим мы можем прописать их в различных объектах аргумента-массива aggregate. Это называется aggregation pipeline. Например, нам нужно исключить из результата поиска выше favouriteFilmIds, так как достаточно наличия favouriteFilms. Для этого модифицируем наш предыдущий запрос оператором unset: