【发布时间】:2017-08-25 21:16:05
【问题描述】:
我正在尝试使用pre('findOneAndUpdate') 来更新Meeting 文档的icon 属性。更新基于yearlymeeting 属性的预先存在的值(见下文)。
因为pre和postsave()钩子没有在update()上执行,我似乎根本无法访问原始文档。然而,这对于我尝试执行的操作至关重要。有没有办法解决?
例如,我可以在pre('save') 上实现我的目的,如下所示:
meetingSchema.pre('save', function(next) {
const yearlymeetingSlug = this.yearlymeeting[0].toLowerCase().replace(/[^A-z0-9]/g, '');
this.icon = `${yearlymeetingSlug}.png`
next();
});
我想做的是这样的:
meetingSchema.pre('findOneAndUpdate', function(next) {
const yearlymeetingSlug = originalDocument.yearlymeeting[0].toLowerCase().replace(/[^A-z0-9]/g, '');
this.icon = `${yearlymeetingSlug}.png`
next();
});
我了解 pre(findOneAndUpdate) 中的 this 指的是查询,而不是存储的文档本身。有什么方法可以访问该文档,以便我可以根据yearlymeeting 的存储值更新icon?
【问题讨论】:
-
如果您理解了,那么您就会理解“文档”在修改点位于“服务器”上,因此“客户端”上的任何库函数都无法进行更改到那里的文件。
.findOneAndUpdate()只知道您在指令中实际发送的“当前数据”。如果客户端上已有字段内容,则在将选项填入$set或类似选项之前进行修改。如果您没有该数据,那么您需要从服务器中检索它。 MongoDB 无法引用现有值
标签: mongodb mongoose middleware