Вы не можете хранить информацию о пользователях и сообщения вместе в одном документе в коллекции, так как вы будете извлекать информацию о пользователях и сообщения отдельно для разных целей, а также добавлять большое количество сообщений в документ пользователя не представляется возможным. Итак, что вы сделали, имея две разные коллекции Пользователи & Запись является правильной & В Записи коллекция поддерживает одно ключевое поле, которое относится к Пользователь (уникальный userid
или _id
пользовательского документа) также правильно выполнен.
Вы можете избежать сохранения Пользователь отношений в Сообщений и сохранять все идентификаторы сообщений в коллекции пользователей, только если количество сообщений меньше, а также это работает не во всех ваших случаях. Сказать, что проектирование базы данных действительно зависит от ваших операций с БД.
Мне нужно выбрать все его сообщения и обновить их по одному?
Нет, вы не понимаете? нужно выбирать и удалять по одному, после успешного удаления / отключения пользователя вы будете запускать один запрос для сообщений , используя .updateMany () с фильтром (userId
или _id
), чтобы найти все документы, относящиеся к конкретному пользователю и добавить новое поле с именем isUserDeletedOrDisabled : true
, поэтому, когда бы вы ни извлекали посты для различных страниц вашего приложения, вы избегали бы извлечения тех постов, которые имеют флаг isUserDeletedOrDisabled
и его true
, обычно при вставке новых сообщений документов - этот флаг вам не нужен. После Пользователь обновлений вы добавите это поле с true
и сделаете его false
, как только пользователь вернется ..
например Пн go БД, где присоединяется 2 Таблицы - дорогая операция?
Я не думаю, что объединение двух коллекций с использованием $ lookup стоит очень дорого, все зависит от размера набора данных / индекса / конфигурации MongoDB. Иметь индексы для полей ключей (например, в сообщениях в коллекции пользователя связанных полей плюс isUserDeletedOrDisabled ). Таким образом, для большинства приложений, если они будут работать нормально с правильными конфигами на месте.
Агрегирование может помочь вам с легкостью удовлетворить большинство повседневных потребностей, кроме того, вы можете проверить производительность запросов и улучшить их. это можно посмотреть в executeStats, предоставленном .explain () (или) $ объяснение . Подробнее читайте: Оптимизация запросов