检查函数findOneAndUpdate是否在mongoose的post hook中修改了字段

时间:2015-04-14 10:34:33

标签: express mongoose middleware

在控制器中我用findOneAndUpdate递增一个字段。不一定总是执行增量,这取决于是否满足更新查询的条件。 如果该字段已增加,则还应更新另一个模型。所以,我正在考虑使用:

schema.post('findOneAndUpdate', function(err) {
    pseudo-code:
    if (field is incremented)
      anotherModel.update()
});

问题是我似乎无法确定该字段是否已被修改。 自引用(this)指向一个相当大的有趣对象(与例如“save”的中间件函数不同),因此我没有看到很多其他选项来确定字段是否被修改。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

传递给findOneAndUpdate的{​​{3}}的回调的参数是要更新的匹配文档,而不是节点回调模式中常见的错误。在回调中,this是从findOneAndUpdate返回的查询对象。

schema.post('findOneAndUpdate', function(doc) {...});

另请注意,如果您需要更新的文档而不是与查询匹配的原始文档,则必须在查询中指定new选项:

findOneAndUpdate(QUERY, UPDATE, {new: true});