Офигенный ответ :)
я есть следующие коллекции
коллекция места
{
"_id" : ObjectId("5acdb8f65ea63a27c1facf86"),
"name" : "ASA College - Manhattan Campus",
"addedBy" : ObjectId("5ac8ba3582c2345af70d4658"),
"reviews" : [
ObjectId("5acdb8f65ea63a27c1facf8b"),
ObjectId("5ad8288ccdd9241781dce698")
]
}
коллекция отзывов
{
"_id" : ObjectId("5acdb8f65ea63a27c1facf8b"),
"createdAt" : ISODate("2018-04-07T12:31:49.503Z"),
"venue" : ObjectId("5acdb8f65ea63a27c1facf86"),
"author" : ObjectId("5ac8ba3582c2345af70d4658"),
"content" : "nice place",
"comments" : [
ObjectId("5ad87113882d445c5cbc92c8")
],
}
коллекция комментариев
{
"_id" : ObjectId("5ad87113882d445c5cbc92c8"),
"author" : ObjectId("5ac8ba3582c2345af70d4658"),
"comment" : "dcfdsfdcfdsfdcfdsfdcfdsfdcfdsfdcfdsfdcfdsfdcfdsf",
"review" : ObjectId("5acdb8f65ea63a27c1facf8b"),
"__v" : 0
}
авторская коллекция
{
"_id" : ObjectId("5ac8ba3582c2345af70d4658"),
"firstName" : "Bruce",
"lastName" : "Wayne",
"email" : "[email protected]",
"followers" : [ObjectId("5ac8b91482c2345af70d4650")]
}
Теперь мой следующий заполненный запрос работает нормально
const venues = await Venue.findOne({ _id: id.id })
.populate({
path: 'reviews',
options: { sort: { createdAt: -1 } },
po,pulate: [
{ path: 'author' },
{ path: 'comments', populate: [{ path: 'author' }] }
]
})
Но я хочу добиться этого с$lookup
запрос, но он разделяет место, когда я делаю '$ unwind' для отзывов ... Я хочу обзоры в том же массиве (например, заполнить) и в том же порядке ...
Я хочу добиться следующего запроса с$lookup
потому что у автора есть поле подписчиков, поэтому мне нужно отправить полеisFollow
при выполнении$project
что нельзя сделать с помощьюpopulate
...
$project: {
isFollow: { $in: [mongoose.Types.ObjectId(req.user.id), '$followers'] }
}