А подскажите пожалуйста еще такой момент. Есть у нас User.

И нужно каким-то образом хранить понравившиеся ему книги. Я придумал такой вариант: у User создать поле likedBooks, которое хранит id понравившихся Книг.

1 Вопрос. Есть ли другие хорошие варианты реализации такого?

2 Вопрос. Мы можем в массив likedBooks сохранять id в виде String, а можем в виде ObjectID с ссылкой.
Есть ли существенная разница в том, какой тип использовать? Если книгу удалить из БД, как поведет себя id в этом массиве при разных способах сохранения в массив id?

2 ответов

14 просмотров

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

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

Обсуждают сегодня

Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
всем привет помогите пожалуйста используя CDN (GCP) у игроков из вьетнама загружается конфиг (размер 999 bytes) загружается 5 и более минут н а других CDN сервисах такой пробл...
Andrew Krw.
1
Добрый день. Мне посоветовали обратиться к вам в чат за помощью. Ситуация описана на скрине. Как мне сказали, мне на бота навесили флудвейт. Есть ли возможность снять его ра...
OVERLINK
7
Просто по очереди выпиливаешь на ручной маппинг? По методу за раз
Andrii Kurdiumov
7
)) может, нужно поправить? )) 2. Ребята, нам нужно, чтобы сообщения из Инстаграм приходили в ОДУ. Какое приложение посоветуете?
Alexander Sharoiko MSE / Александр Шаройко
1
Я правильно понимаю что нет способов получить список ожидающих заявок на вступление в группу с помощью бота из mtproto?
Шамиль Прилов
7
Приветствую. А не подскажете какие ограничения есть на использования api метода setMyName ? Несколько раз сменил имя бота и получил бан на 2 месяца на смену имени.
Slick Slack
8
И? Все равно глазами проверять надо каждое поле
Andrii Kurdiumov
4
Всем привет! Взялся портировать модули на 18 версию, лезет _logger.log(log_level, 'no translation language detected, skipping translation %s', frame, stack_info=True) А чт...
Max Lit
3
Ну есть у нас десяток компаний которым надо. Остальным то зачем?
Andrii Kurdiumov
4
Карта сайта