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

时间:2019-08-09 18:48:11

标签: mongodb mongodb-query

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

让我们说我有一个雇员名单

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 个答案:

答案 0 :(得分:0)

由于您要更新多个整体,因此可以这样:

当您说自己有一个列表时-考虑将其放在文件中或要通过代码处理的位置,然后尝试将数据读入数组:

/etc/sudoers.tmp

因此,在这里,我们考虑将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 } } } }) ) ) 作为您要更新的字段,我们没有考虑在文档中保留old_phone_number和new_phone_number两个字段。

或者,如果您想在文档中包含两个电话号码,则:

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中使用旧电话号码,在字段{{1中也使用新电话号码}}。

同样,您没有提到任何特别之处,如果您确实确实需要单独更新每个记录以进行多个数据库调用,那么通常可以使用phone_numbernew_phone_number.update() { {1}}取决于您的要求/兴趣。

findAndModifyupdateupdateOneupdateMany

答案 1 :(得分:-1)

默认情况下,MongoDB $update方法更新单个记录。但是,如果要更新多个符合条件的文档,则可以使用Multi参数(将其设置为true)。

void use(struct Vec3 *restrict uninit out);

还要查看$updateOne$updateMany