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

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

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

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

2 ответов

16 просмотров

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

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

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

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
1. https://www.kaggle.com/code/ahmadrezagholami2001/housing-estimation-linear-regression 2. https://www.kaggle.com/code/ahmadrezagholami2001/uncovering-quality-in-wines-logis...
Ahmadreza
1
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Карта сайта