代码之家  ›  专栏  ›  技术社区  ›  c-chavez

mongodb findOneAndUpdate只获取更新字段

  •  1
  • c-chavez  · 技术社区  · 7 年前

    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'};
    

    我要寻找的是一种简单的方法(mongodb函数或属性将是理想的)来 ,而不是比较两个对象(之前和之后)。

    使用 mongodb node driver

    "mongodb": "^3.1.6"
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Ashh    7 年前

    你可以这样做

    为要传递的键创建一个值等于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 }
    )