У меня есть коллекция сообщений с базовыми c информацией, например:
Posts = {
_id: '',
title '',
desc '',
...
}
У меня также есть коллекция лайков вроде (document создаются или удаляются пользователем, как сообщение):
Likes = {
_id: '',
user_id: '',
post_id: '',
}
, и цель будет заключаться в том, чтобы, когда я получу список сообщений , добавить поле Понравилось кто показывает истину / ложь, если документ лайк совпадает или нет, а также количество совпадений в коллекции лайк (это я знаю как), например:
Posts = [{
_id: '',
title '',
desc '',
liked: true,
likes: 5,
...
}, ...]
Я использовал $lookup
и $addFields
, но пока могу присоединиться только с одним значением. В моем случае я хочу один специфицированный c документ и отфильтрованный по 2 полям (user_id, post_id).
То, что я получил до сих пор:
const posts = await posts.aggregate
([
{
$lookup: {
from: 'likes',
localField: '_id',
foreignField: 'post_id',
as: 'likes'
}
},
{ $match: {
user_id: mongoose.Types.ObjectId(req.params.id),
} },
{
$addFields: {
likes:
{ $size: "$likes" } // here nb of likes
}
}
])