ms-dred
@ms-dred
Вечно что то не то и что то не так...

Как проверить лайки пользователя к посту?

Подскажите как быть и что делать?
Есть три коллекции 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
  • Вопрос задан
  • 321 просмотр
Решения вопроса 1
@lega
Лайки надо хранить в посте, (и можно кешировать в браузере, что-б лишний раз не нагружать сервер).
Итого, одним простым и быстрым запросом достается пост и лайки, без всяких хитроумных запросов.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы