使用嵌入时,更新不同集合中文档的所有引用

时间:2019-06-06 19:15:19

标签: node.js database mongodb mongoose nosql

我设计的数据库和模型具有嵌入(以获得更好的读取性能)和引用(模型的逻辑要求)的混合体 当我使用嵌入和引用的混合方式时,我想更新其他集合中所有文档的出现(该文档由_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数据库中工作的方式,我必须接受更新的依赖关系?

另一个例子,一个有一些学生的班级:(我使用猫鼬进行建模)

0 个答案:

没有答案