И нужно каким-то образом хранить понравившиеся ему книги. Я придумал такой вариант: у User создать поле likedBooks, которое хранит id понравившихся Книг.
1 Вопрос. Есть ли другие хорошие варианты реализации такого?
2 Вопрос. Мы можем в массив likedBooks сохранять id в виде String, а можем в виде ObjectID с ссылкой.
Есть ли существенная разница в том, какой тип использовать? Если книгу удалить из БД, как поведет себя id в этом массиве при разных способах сохранения в массив id?
1. "Хорошо" определяется потребностями/задачами, если потребность быстро сделать прототип - то вариант "хороший", если надо потом будет экспортировать эти лайки в рекомендательную систему - уже не очень, и там предпочтительнее отдельная коллекция лайков/дизлайков причем в формате заточнном под эту задачу. Возможно даже для производительности придется и так и так хранить, решая отдельные задачи. 2. Т.к. _id лайка похоже не будет сам по себе участвовать в формировании связей в качестве ключа и наверняка даже на фронты не будет выводиться, то по сути неважно даже будет ли он вообще сохранен, не говоря уже о типе. Для уникальных значений ObjectId будет меньше есть места, но это будет иметь смысл только на больших объемах и возможно вам будет проще работать со строками в самом коде а вот про удаление книги из БД это отдельный прикол, потому как монга сама не предоставляет ни механизма foreign ключей и каскадного удаления ни триггеров для автоматизации этой части. Собственно все это реализуется в вашем коде (в монгусе например есть middleware перехватчики, которые могут использоваться для скрытия этого из основного кода). И как следствие вы выбираете как вам удобнее реализовать это по вашей структуре БД, подчищая все места, где эта книга упоминалась.
спасибо большое 🙏
Обсуждают сегодня