У меня есть следующая коллекция сообщений
{
"_id" : ObjectId("5ad5ddb15e540442a7d4213c"),
"content" : "content1",
"comments" : [ObjectId("5af2a10dc56ad8378a3fbffa")]
}
У меня есть следующая коллекция комментариев
{
"_id" : ObjectId("5af2a10dc56ad8378a3fbffa"),
"likeBy" : [ObjectId("5ac8ba3582c2345af70d4658")],
"post" : ObjectId("5ad5ddb15e540442a7d4213c"),
"comment" : "comment1",
}
Я сделал следующий $lookup
запрос ... Запрос работает идеально, когда массив комментариев имеет ids
как
"comments" : [ObjectId("5af2a10dc56ad8378a3fbffa")]
... Но когда комментарии очищаются как
"comments" : []
затем он возвращает пустой массив ... По крайней мере, он должен вернуть первое match
условие { $match: { _id: mongoose.Types.ObjectId(id) }}
...
const post = await Post.aggregate([
{ $match: { _id: mongoose.Types.ObjectId(id) }},
{ $lookup: {
from: 'comments',
localField: 'comments',
foreignField: '_id',
as: 'comments'
}
},
{ $unwind: '$comments' },
{ $addFields: {
"comments.isLiked": {
$in: [
mongoose.Types.ObjectId(req.user.id),
"$comments.likeBy"
]
}
}}
{ $group: {
_id: '$_id',
content: {$first: '$content'},
comments: {$push: '$comments'}
}
}
])
Так что мой ожидаемый результат должен быть
{
"_id" : ObjectId("5ad5ddb15e540442a7d4213c"),
"content" : "222222222222222222222222222222222222222222",
"comments" : []
}