如何使用猫鼬更新进行多重更新

时间:2019-12-30 04:42:52

标签: node.js mongodb mongoose

我在mongodb中有四个文档。

// first document
  {
    "id": 1,
    "exist": true
  }
// second document
  {
    "id": 2,
    "exist": false
  }
// third document
  {
    "id": 3,
    "exist": false
  }
// forth document
  {
    "id": 4,
    "exist": false
  }

我想这样更新。这是因为只有一个文档可以具有真实的价值。

// first document
  {
    "id": 1,
    "exist": false
  }
// second document
  {
    "id": 2,
    "exist": false
  }
// third document
  {
    "id": 3,
    "exist": true
  }
// forth document
  {
    "id": 4,
    "exist": false
  }

如何在Node.js中使用猫鼬进行查询?非常感谢您阅读。 我只想通过一个查询而不是多个查询来解决这个问题。

1 个答案:

答案 0 :(得分:1)

尝试一下,可以在一个DB调用中实现:

db.yourCollectionName.bulkWrite([
    {
        updateMany:
        {
            "filter": {},
            "update": { $set: { "exist": false } }
        }
    },
    {
        updateOne:
        {
            "filter": { id: 4 },
            "update": { $set: { "exist": true } }
        }
    }
])

或者您可以尝试一下,也许这可能会更快,因为它正在搜索过滤器,可能在索引上,尽管第一个查询并没有真正更新所有文档,而是必须进行全部扫描:

db.yourCollectionName.bulkWrite( [
   { updateMany :
      {
         "filter" : {"exist" : true},
         "update" : {$set :{"exist" : false}}    
      }
   },
   { updateOne :
      {
         "filter" : {id:4},
         "update" : {$set :{"exist" : true}}    
      }
   }
])

参考: .bulkWrite()