Mongoose:如何通过model.findOneAndUpdate()检查文档是否被修改

时间:2016-01-28 10:59:27

标签: node.js mongodb mongoose database

在mongoose中,我们可以检查更新操作是否使用model.update()修改了文档:

model.update(query, update, function(err, raw){
    if (raw.nModified >= 1) console.log('document is modified!')
});

有没有办法对model.findOneAndUpdate()执行相同操作?

model.findOneAndUpdate(query, update, { new: true }, function(err, doc){
    if (doc) {
        // So MongoDB found the document, but is there a way 
        // to know the document was indeed modified?
    }
});

1 个答案:

答案 0 :(得分:2)

您可以将选项{ passRawResult : true }传递给mongoose,以建议mongoose传递底层mongodb驱动程序的原始结果,在本例中为mongodb-native,作为回调的第三个参数。

findOneAndUpdate

的mongodb原生文档
model.findOneAndUpdate(query, update, { new: true, passRawResult : true }, function(err, doc, res){
    // res will look like
    // { value: { _id: 56a9fc80a7f9a4d41c344852, name: 'hugo updated', __v: 0 },
    //   lastErrorObject: { updatedExisting: true, n: 1 },
    //   ok: 1 }
});

如果由于未找到匹配的文档而导致更新未成功,则会将null res传递给回调。如果文档匹配但是与更新res对象之前相同的字段值将无法提供足够的信息来确定是否为匹配文档更新了值。