我正在尝试使用一个简单的预挂钩Mongoose来删除这样的文档的任何引用:
PostSchema.pre("remove", async () => {
await Comment.remove({ _postId: this._id }).exec();
await User.update({ $pull: { _posts: this._id } }).exec();
});
上面的胖箭头语法似乎不起作用 - 虽然删除了Post文档,但Comment和User模型不会相应更新。相反,我必须使用旧语法(根据mongoose文档)来使钩子正常工作,如下所示:
PostSchema.pre("remove", async function() {
await Comment.remove({ _postId: this._id }).exec();
await User.update({ $pull: { _posts: this._id } }).exec();
});
我觉得这很奇怪,除非我当然做错了。这是预期的行为吗?
答案 0 :(得分:4)
因为this
指向全局范围,而不是箭头函数中的函数范围。在这种情况下,请使用function(){}
代替
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions