Как лучше всего структурировать модели «многие ко многим» в схеме mon goose?
У меня есть две модели, которые связаны между собой отношениями «многие ко многим». Пользователи могут принадлежать ко многим организациям, и у организаций может быть много пользователей.
Параметры:
- Определите взаимосвязь в каждой модели , сославшись на другую модель
- Определите взаимосвязь в одна модель, ссылаясь на другую модель
Вариант 1
const UserSchema = new Schema({
organiations: { type: Schema.Types.ObjectId, ref: "Organiation" }, // references organisation
})
mongoose.model("User", UserSchema)
const OrganiationSchema = new Schema({
users: { type: Schema.Types.ObjectId, ref: "User" }, // references users
})
mongoose.model("Organiation", OrganiationSchema)
Сначала это кажется хорошей идеей, и это означает, что я могу запросить модель организации, чтобы получить всех пользователей, и я может также запросить модель пользователя, чтобы получить все относительные организации.
Единственная проблема в том, что я должен поддерживать 2 источника истины. Если я создаю организацию, я должен обновить пользователя с организациями, к которым он принадлежит, и я должен обновить организацию, указав пользователей, которые у нее есть.
Это приводит меня к варианту 2, который должен иметь один источник истины, определяя отношения только в одной модели.
вариант 2:
const UserSchema = new Schema({
organiations: { type: Schema.Types.ObjectId, ref: "Organiation" }, // references organistion
})
mongoose.model("User", UserSchema)
const OrganiationSchema = new Schema({}) // no referencces
mongoose.model("Organiation", OrganiationSchema)
Это означает, что когда Я создаю новую организацию, мне нужно только обновить пользователя с организациями, к которым он принадлежит. Риск рассинхронизации двух источников отсутствует c. Однако это означает, что когда дело доходит до запроса данных, это делает его более сложным. Если я хочу получить всех пользователей, принадлежащих к организации, я должен запросить пользовательский документ. Это означало бы, что мой организационный контроллер должен знать как пользовательские, так и организационные модели, и когда я начинаю добавлять больше взаимосвязей и моделей, я получаю тесную связь между всеми этими модулями, чего я хочу избежать.
Как вы порекомендуете обрабатывать отношения «многие ко многим» в схеме mon goose?