[英]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.