正在更新嵌套的MongoDB集合(Pymongo)



-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"}]
)

最新更新