我正在尝试在我的 MongoDB 后端中使用 Mongoose 的 pre 和 post 钩子,以便比较文档在其保存前后的状态,并根据更改触发其他事件。然而,到目前为止,我无法通过 Mongoose 的 pre 钩子获取文档。根据文档,“pre 钩子适用于 doc.save() 和 doc.update(),在这两种情况下都是指文档本身...”。因此,我尝试了以下方法。首先,在我的模型/架构中,我有以下代码:
let Schema = mongoose
.Schema(CustomerSchema, {
timestamps: true
})
.pre("findOneAndUpdate", function(next) {
trigger.preSave(next);
})
// other hooks
}
然后在我的触发器文件中,我有以下代码:
exports.preSave = function(next) {
console.log("this: ", this);
}
};
但是这是控制台上的日志:
this: { preSave:[Function],postSave:[AsyncFunction] }
很明显这没有起作用。这并没有像我希望的那样记录文档。为什么在此处 this
不是文档本身,因为文档本身似乎表明了这一点?是否有一种方法可以通过 pre
钩子获得文档?如果没有,人们是否有其他方法来完成这个任务?
findOneAndUpdate
列为查询中间件(同样也适用于update
)。事实上,这些方法根本无法访问正在更新的文档。 - JohnnyHK/some/
的pre
钩子中检索文档。这取决于中间件的类型,而不是前/后置。findOneAndUpdate
是一种查询类型的中间件 - 但它并不是特定的pre
。 - scipilotconsole.log("removing",this); // ****** 输出 - removing {} await deleteAllUsersInEntity(this); await deleteAllThreadsInEntity(this);
})` - Heet Shah{}
是一个空对象,而不是什么都没有。 - scipilot