Подскажите как быть и что делать?
Есть три коллекции USERS/POSTS/LIKES
USERS
{
_id: ObjectID('...'),
name: 'String'
}
POSTS
{
_id: ObjectID('...'),
url: 'String',
createdBy: 'String User Name'
}
LIKES
{
_id: ObjectID('...'),
uid: 'String ObjectID POSTS',
owner: 'String ObjectID USERS'
}
При добавлении лайка к записи от пользователя в коллекции LIKES создается новый документ в который записывается
uid - ID поста (POSTS._id)
owner - Владелец лайка USERS._id
На главной странице есть 20 записей и у каждой кнопочка лайкнуть запись, так вот как можно проверить лайкнул ли пользователь ранее эту запись или нет?
На ум приходит 2 версии, первая простая и понятная, собрать необходимые POSTS._id и проверить в базе лайков, но вот вторая мне кажется более интересная, а вот как это сделать я не пойму:
Есть уже готовый запрос который выбирает 20 постов и склеивает их с Posts.createdBy || USERS.name
Posts
.aggregate([
{
$match: {
public: true
}
},
{ $sort: { createdAt: -1 }},
{ $skip: offset },
{ $limit: 20 },
{
$lookup: {
from: 'users',
localField: 'createdBy', // Posts.createdBy
foreignField: 'name', // Users.name
as: 'owner'
}
}, {
$project: {
id: 1,
url: 1,
'owner.ava': 1,
'owner.name': 1
}
},
{ $unwind: '$owner' }
]).exec((e, data) => {
return c(e || ! data.length ? e || page.notFound : null, data)
});
Можно ли как то сделать в aggregate третий запрос в коллекцию Likes и проверить существует ли запись Posts._id и Users._id (текущего пользователя (req.user._id)) И в полученных документах создать дополнительные поля verifyLike = true/false