-EDIT-
如何使用Pymongo基于多个条件更新嵌套集合?
我的文档如下:
[{'_id': ObjectId('613eb154aee899694f934259'),
'company':
[{'name': 'Flower shop',
'persons':
[{'personId': '1000',
'personIdType': 'Passport/Others'},
{'personId': '3000',
'personIdType': 'Passport/Others'}
]}
]}
]
我想将personId 1000更新为2000。因此,这两个条件是:objectId='613eb154aee899694f93425'和personId=1000
我感谢你的帮助。
尝试使用$set
设置personId
字段。您需要arrayFilter
来指定数组的筛选条件。
db.collection.update({
_id: ObjectId("613eb154aee899694f934259")
},
{
$set: {
"company.$[].persons.$[p].personId": 2000
}
},
{
arrayFilters: [
{
"p.personId": "1000"
}
]
})
这是Mongo游乐场供您参考。
@ray的答案是正确的。但你必须将他的解决方案转换为python。
下面的答案是在python中转换的@ray答案的精确复制。
from pymongo import MongoClient
from bson.objectid import ObjectId
col = MongoClient()["temp"]["tmp9"]
col.update_many({
"_id": ObjectId("613eb154aee899694f934259"),
}, {
"$set": {
"company.$[].persons.$[p].personId": "2000",
}
},
array_filters=[{"p.personId": "1000"}]
)