我设计的数据库和模型具有嵌入(以获得更好的读取性能)和引用(模型的逻辑要求)的混合体 当我使用嵌入和引用的混合方式时,我想更新其他集合中所有文档的出现(该文档由_id引用并具有其他字段)。
我设计MongoDB模型的方式是,如果我想获得一个文档,例如,一个拥有某些课程的学生,那么我会在子文档中获得该课程的名称,除了它的_id之外。
问题是,但是当有人更改课程名称时该怎么办?这个学生也应该被更新。这不是一个真正的问题,但是如果依赖关系越来越多(为了获得更好的读取性能,我仍然需要在_id旁边保留一些其他数据)怎么办?更新另一个文档时如何跟踪相关文档?
const schema = new Schema({
_id: Types.ObjectId,
name: {
type: String,
required: true
},
nStudents: {
type: Number,
min: 0,
default: 0
},
students: [{
_id: {
type: Types.ObjectId,
ref: 'student'
},
name: { //For better read performance , but what if student name changes?what if I have dozens of these kinds ofdependencies in other models?
type: String,
required: true
},
image: String
}]
})
我在这里做错什么了吗?我不应该混合使用嵌入和引用吗? 还是这是在非SQL数据库中工作的方式,我必须接受更新的依赖关系?
另一个例子,一个有一些学生的班级:(我使用猫鼬进行建模)