mongodb findOneAndUpdate仅获取更新的字段

时间:2018-09-15 21:30:21

标签: javascript mongodb node-mongodb-native

我正在使用mongodb插入和更新某些集合中的某些文档。更新文档时,我只想获取修改后的字段。通过使用returnOriginal选项进行更新,我可以获得完整的新文档(包括修改后的字段),但是它为我提供了所有属性。

来自docs

  

returnOriginal |可选|如果为false,则返回更新的文档   而不是原始的。默认值为true

我的代码是:

let result = await db.myCollection.findOneAndUpdate(
        {_id: ObjectId('5a2451399054bf000453c332')}, 
        data,
        {returnOriginal: true}
    );

其中data可以是一个字段,也可以是多个字段,例如:

let data = {field1: 'newValue1'};

let data = {field1: 'newValue1', field2: 'newValue2'};

我只想获取那些字段,但是更新的结果是给了我整个对象,包括_id属性和所有其他对象,即使它们没有被修改。

我正在寻找的是一种仅获取已修改字段的简单方法(最好是mongodb函数或属性),而不是比较两个对象(之前和之后)。

使用mongodb node driver

"mongodb": "^3.1.6"

1 个答案:

答案 0 :(得分:0)

您可以这样做

为要传递的键创建一个键值对,其值等于1以用于投影。

var keys = {}
let data = { field1: 'newValue1', field2: 'newValue2' }
function setUsers(data) {
  for (var k in data) {
    if (data.hasOwnProperty(k)) {
      keys[k] = 1
    }
  }
  return keys
}
const projection = setUsers(data)

,然后在查询中使用投影来限制字段

db.myCollection.findOneAndUpdate(
  { _id: ObjectId('5a2451399054bf000453c332') }, 
  data,
  { returnOriginal: true, projection }
)