首页 > 解决方案 > 如何检查更新的文档是否真的被修改了?

问题描述

我有一个“项目”集合,这是集合中的示例文档:

{ "id": 0, "price": 23.55 }

我正在更新编写一个更新项目价格的查询,但想检查价格字段是否真的修改了。

例如,以下查询是合法的,但实际上并不修改文档。

db.collection('items').updateOne(
  { id: 0 },
  { $set: { price: 23.55 } }
);

有什么方法可以实现吗?

标签: node.jsdatabasemongodbmongodb-query

解决方案


updateOne将返回nModified您可以了解文档是否被修改。

{  "n": 1,  "nModified": 1 }

https://mongodb.github.io/node-mongodb-native/3.6/api/Collection.html#updateOne

https://mongodb.github.io/node-mongodb-native/3.6/api/Collection.html#~updateWriteOpCallback


https://mongodb.github.io/node-mongodb-native/3.6/api/Collection.html#findOneAndUpdate

使用findOneAndUpdate设置returnOriginal为 false,您将在回调中获得更新的文档。

const options = { returnOriginal: false; } // to return the updated document
findOneAndUpdate(filter, update, options, callback)

https://mongodb.github.io/node-mongodb-native/3.6/api/Collection.html#~findAndModifyCallback

从 findAndModify 命令返回的文档。如果没有找到文档,默认情况下 value 将为 null (returnOriginal: true),即使文档被更新;如果 returnOriginal 为 false,则在这种情况下将返回插入的文档。


推荐阅读