我有一个包含一系列子文档的文档,我会对这些子文档进行某种版本控制,例如添加到此数组中的每个新子文档的编号都会增加。应该在每个单独的子文档上保存和增加版本,我认为最好的方法是在猫鼬中间件中做到这一点?
我写了这个,它按预期工作,但感觉有点麻烦,我想知道是否有更好更合适的方法来实现结果。
每次将新的子文档推送到 agreementInfo
数组时,我想要做什么都会增加 new 子文档版本字段上的版本。它将始终增加 1,并且永远不会删除任何子文档。
模型的相关部分
const Agreement = mongoose.Schema({
...
agreementInfo: [
{
version: { type: Number, default: 0 },
referencePrice: Number
....
]
}
})
预钩
Agreement.pre('findOneAndUpdate', async function (next) {
const docToUpdate = await this.model.findOne(this.getQuery());
const latestVersion = Math.max(
...docToUpdate.agreementInfo.map((info) => info.version)
);
this._update.$push.agreementInfo.version = latestVersion + 1;
next();
});
初始文档创建
const agreement = new Agreement({
...
agreementInfo: {
version: 1,
referencePrice: 1000
...
},
});
agreement.save()
添加新的子文档
const query = { _id: ObjectId(id) };
const update = {
$push: {
agreementInfo: { referencePrice: 500 },
// this will get version : 2 in the DB when using the pre hook
},
};
await Agreement.findOneAndUpdate(query, update);