$ pesquisa em vários níveis sem $ desenrolar?
Tenho as seguintes coleções
coleção local
{
"_id" : ObjectId("5acdb8f65ea63a27c1facf86"),
"name" : "ASA College - Manhattan Campus",
"addedBy" : ObjectId("5ac8ba3582c2345af70d4658"),
"reviews" : [
ObjectId("5acdb8f65ea63a27c1facf8b"),
ObjectId("5ad8288ccdd9241781dce698")
]
}
coleção de comentários
{
"_id" : ObjectId("5acdb8f65ea63a27c1facf8b"),
"createdAt" : ISODate("2018-04-07T12:31:49.503Z"),
"venue" : ObjectId("5acdb8f65ea63a27c1facf86"),
"author" : ObjectId("5ac8ba3582c2345af70d4658"),
"content" : "nice place",
"comments" : [
ObjectId("5ad87113882d445c5cbc92c8")
],
}
coleção de comentários
{
"_id" : ObjectId("5ad87113882d445c5cbc92c8"),
"author" : ObjectId("5ac8ba3582c2345af70d4658"),
"comment" : "dcfdsfdcfdsfdcfdsfdcfdsfdcfdsfdcfdsfdcfdsfdcfdsf",
"review" : ObjectId("5acdb8f65ea63a27c1facf8b"),
"__v" : 0
}
coleção de autores
{
"_id" : ObjectId("5ac8ba3582c2345af70d4658"),
"firstName" : "Bruce",
"lastName" : "Wayne",
"email" : "[email protected]",
"followers" : [ObjectId("5ac8b91482c2345af70d4650")]
}
Agora, minha consulta preenchida a seguir funciona bem
const venues = await Venue.findOne({ _id: id.id })
.populate({
path: 'reviews',
options: { sort: { createdAt: -1 } },
po,pulate: [
{ path: 'author' },
{ path: 'comments', populate: [{ path: 'author' }] }
]
})
Mas eu quero alcançá-lo com$lookup
consulta, mas divide o local do evento quando eu estiver '$ desenrolando' nos comentários ... Quero comentários no mesmo array (como preencher) e na mesma ordem ...
Eu quero alcançar a seguinte consulta com$lookup
porque autor tem seguidores campo, então eu preciso enviar campoisFollow
fazendo$project
o que não pode ser feito usandopopulate
...
$project: {
isFollow: { $in: [mongoose.Types.ObjectId(req.user.id), '$followers'] }
}