[英]Modelling many-to-many relationships in MongoDB
我在為學校應用程序設計構架時遇到困難。
特別是,我正在嘗試使用他們所屬的課程和教程來模擬不同類型的用戶(例如,講師,助教和學生)之間的關系。
這是我的要求:
到目前為止,以下是我針對用戶,課程和教程集合的架構。
var CourseSchema = new mongoose.Schema({
name: { type: String, required: true },
code: { type: String, required: true },
tutorials: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Tutorial' }], // 1
instructors: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }], // 2
students: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }] // 3
});
var TutorialSchema = new mongoose.Schema({
number: { type: String, required: true },
teachingAsst: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }] // 4
});
var UserSchema = new mongoose.Schema({
email: { type: String, lowercase: true },
password: String,
name: {
first: { type: String, lowercase: true },
last: { type: String, lowercase: true }
},
roles: [String] // instrutor, teachingAsst, student
};
問題出在我的5到8的要求上-更重要的是從用戶到其他模型的關系。 建模這些關系的好方法是什么?
我想到的一種方法是,例如要求5是向User模式添加一個字段
instructor: {
courses: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Course' }]
}
但是,當我執行第6項要求時,也會發生問題,類似地,因為它會使查詢復雜化(例如“在用戶是助教的課程中查找所有教程”)。
teachingAsst: {
courses: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Course' }]
tutorials: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Tutorial' }]
}
就您而言,設計是多對多的關系。 因此,您有兩種解決方法。
嵌入式方法將具有難以更新和刪除的重復數據,這是因為由於單個查詢,讀取操作將非常有效。
如果是參考方法,您的數據將被貶低。 因此,更新和刪除操作將很容易,因為讀取操作將對數據庫產生多次命中。
因此,根據您的應用程序要求,您必須確定適當的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.