Столкнулся с трудностями как продумать эффективную систему лайков для постов-твитов. Использую NodeJS/Mongoose.
Первое что приходит в голову выглядит очень неэффективно, куча ненужных вычислений. Поскольку надо не просто счетчик лайков, а и показывать конкретному человеку лайкнул он этот твит или нет.
1. В модель Tweet сделать поле Likes, куда засовывать ObjectID всех лайкнувших.
2. Таким образом мы довольно эффективно можем считать количество лайков (просто кол-во записей)
3. Но когда вопрос стоит чтобы показать конкретному человеку ставил он лайк или нет, нам придется отправлять на клиент список всех лайкнувших и там находить совпадение с айдишником человека. Это выглядит глупо - зачем мне отправлять на клиент массив с 10000 записей лайков, только чтобы там найти совпдаение?
4. А делать отдельный эндпоинт только для статуса лайка где вычислять эти значения отдельно выглядить слишком жирно (подобного функционала будет много, и будет слишком путаница)
Также вопрос отдельно от Монги, по АПИ. У меня это все идет по РЕСТу. Поэтому это все надо получать одним запросом, когда юзер открывает страницу с лентой твитов. Как это продумать?
Для поста сделать счетчик лайков, так ты всегда будешь знать их количество, его ты будешь увеличивать/уменьшать при лайках или их отмене. Так-же вести отдельный учет каждого лайка юзеров, так ты всегда сможешь быстро узнать, лайкал ли юзер пост или нет.
Раз есть инфа о лайках, значит можно получить лайкал ли юзер конкретный пост, если есть запись то лайкал, если нет то нет. Аналогично и для нескольких постов.