我试图使用Mongoose的findOneAndUpdate
挂钩(详细讨论here),尽管我在尝试设置值更新后有一些问题。使用findOneAndUpdate` Mongoose钩子设置值更新后的值
例如:
MySchema.findOneAndUpdate({_id: fj394hri3hfj}, {$push: {comments: myNewComment}})
将触发以下钩:
MySchema.post('findOneAndUpdate', function(result) {
this.update({}, { totalNumberOfComments: result.comments.length });
});
虽然,钩将$push
到comments
再次myNewComment
,因此使重复的条目。
我使用this.update({}, {....})
而不是this.findOneAndUpdate({}, {....})
内的挂钩,以便post
挂钩不被无限调用。
totalNumberOfComments
完全设置为comments.length
的长度。
因此,好像this.update({}, {....})
只是将更多更新字段推送到this
上已有的更新字段。
如何在我的挂钩中设置totalNumberOfComments
而不是重新推送评论?
你确定发布'findOneAndUpdate'挂钩在你的情况下被调用吗? – Raeesaa
嗯,是的,这就是它创建重复的原因,因为它在我的'findOneAndUpdate'调用中被调用,然后再次在钩子中调用。我也在钩子里做了一个'console.log(this)'并且它成功记录了。问题是,'this'仍然保存'$ push:{comments:myNewComment}'更新,并且钩子也只是推送一个'$ set'更新,因此它有'$ push'两次。 – Fizzix
好的。是否真的有必要使用post hook?你可以只用'find'和'save'来代替。 – Raeesaa