提问者:小点点

使用多个where子句写入更新mongo查询


新的mongo,我正在努力编写更新mongo查询与多个where子句

假设我有员工名单

name    |emp_id | old phone number | new phone number
Steve   |123    | 123-456-7896     | 801-123-4567
John    |456    | 123-654-9878     | 702-123-4567
Steve   |789    | 789-123-7890     | 504-123-4567

我想写一个mongo的问题

更新到姓名和emp_id都匹配的新电话号码。该文档有大约200个条目。


共2个答案

匿名用户

因为你有多个实体要更新,你可以有这样的东西:

当你说你有一个列表时-考虑到它在文件中或通过代码处理的某个地方,然后尝试将数据读入数组:

let dataArray = [{name: Steve, emp_id: 123, new_phone_number :801-123-4567},{name: John, emp_id: 456, new_phone_number :702-123-4567},....]

db.getCollection('YourCollection').bulkWrite(
  dataArray.map((each) => 
    ({
      updateOne: {
        filter: { 'name': each.name, 'emp_id': each.emp_id  },
        update: { $set: { phone_number: each.new_phone_number } }
      }
    })
  )
)

所以这里我们考虑将phone_number作为要更新的字段,我们没有考虑维护两个字段old_phone_number

或者,如果您想在文档中有两个电话号码,那么:

db.getCollection('YourCollection').bulkWrite(
      dataArray.map((each) => 
        ({
          updateOne: {
            filter: { 'name': each.name, 'emp_id': each.emp_id  },
            update: { $set: { new_phone_number: each.new_phone_number } }
          }
        })
      )
    )

如上所述-我们正在向所有匹配的文档注入一个新的字段new_phone_number,最终结果将有旧的电话号码作为字段phone_number以及字段new_phone_number中的新电话号码。

另外,由于您没有提到任何特别的内容,如果您确实需要单独更新每个记录进行多个DB调用,那么您通常可以使用. update().updateOne().update很多().findAndModify()取决于您的要求/兴趣。

查找和修改,更新,更新一个,更新多个

匿名用户

默认情况下,MongoDB$update方法更新单个记录。但是如果你想更新多个匹配条件的文档,那么你可以使用多参数(将其设置为true)。

db.people.update(
   { name: "Steve", emp_id:123 },  //this is first parameter of update method. Define your query here
   {
      new_phone_number: 111-111-111  //This is second parameter. Update operation here
   },
   { multi: true }  // This is third one. Options here
)

同时查看$updateOne和$update多