新的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个条目。
因为你有多个实体要更新,你可以有这样的东西:
当你说你有一个列表时-考虑到它在文件中或通过代码处理的某个地方,然后尝试将数据读入数组:
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多