我有3个具有这种关系的模型:
场==> [章] ==>测验
即,我有一个课程模型,其中包含ObjectId
个引用章文档的数组,而我的章模型中包含一个ObjectId
引用测验文档的>
在我的课程模式定义,我有一个lastUpdated
在其执行其中存储的时间的过程中的最后修改字段。
架构定义在下面给出:
课程模式:
let courseScheme = mongoose.Schema(
{
title: { type: String, required: true },
nbChapters: { type: Number, default: 0 },
chapters: { type: [mongoose.Schema.Types.ObjectId], default: [], ref: 'Chapter' },
lastUpdated: { type: Date, default: Date.now() }, // I want this field to be updated if I create/update/delete a reference or a transitive reference of this document
}
);
章节模式:
let chapterScheme = mongoose.Schema(
{
chapterName: {type: String, required: true},
chapterIndex: {type: Number, required: true}, // used to sort chapters on client side (for ex: in navigation menu)
course: { type: mongoose.Schema.Types.ObjectId, required: true, ref: 'Course' },
quizzId: {type: mongoose.Schema.Types.ObjectId, ref: 'Quiz'},
// some more fields
}
);
测验模式:
let quizScheme = mongoose.Schema(
{
questions: [
{
questionIndex: {type: Number, required: true}, // used to sort questions on client side
type: {type: String, required: true, enum: ['MultiSelect', 'Select', 'Input']},
question: {type: String, required: true}
// some more fields
},
]
}
);
我想知道是否有任何好的做法来更新课程文档中的lastUpdated
字段,如果我对其子级的任何子项进行了修改(直接/间接)。例如,如果我为给定课程的一章添加新的测验参考,那么如何更新相应课程的lastUpdated
字段?
我想做以下事情:
PS:我不是在要求代码作为答案,而只是暗示了这种操作的常见良好做法。
答案 0 :(得分:1)
我想您有两种可能的方法:
更新数据库时的句柄
在更改链接架构时更新lastUpdated
字段。您有几种方法(您已经提到过)
chapters
比更新courses
查询数据库时的句柄
如果对另一个集合进行了更改,请不要更新lastUpdated
集合上的courses
字段。而是在所有相关集合上保留一个lastUpdated
字段,并在查询时选择最近的日期。
示例
在查询数据时,对两个集合$lookup
和chapters
使用courses
聚合。根据结果,从lastUpdated
或courses
中选择最近的chapters
日期。
希望这会有所帮助