0
我很難爲學校應用提供模式。在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是添加一個字段到用戶架構
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' }]
}