更新嵌套MongoDB集合(Pymongo)

2024-05-16 12:07:19 发布

您现在位置:Python中文网/ 问答频道 /正文

-编辑-

如何基于多个条件使用Pymongo更新嵌套集合

我的文档如下所示:

[{'_id': ObjectId('613eb154aee899694f934259'),
  'company': 
      [{'name': 'Flower shop', 
        'persons': 
            [{'personId': '1000',
              'personIdType': 'Passport/Others'},
             {'personId': '3000',
              'personIdType': 'Passport/Others'}
            ]}
      ]}
]

我想将personId 1000更新为2000。因此,这两个条件是:objectId='613eb154aee899694f934259'和personId=1000

谢谢你的帮助


Tags: name文档id编辑shop条件companyobjectid
2条回答

尝试使用$set设置personId字段。您需要arrayFilter来指定数组的筛选条件

db.collection.update({
  _id: ObjectId("613eb154aee899694f934259")
},
{
  $set: {
    "company.$[].persons.$[p].personId": 2000
  }
},
{
  arrayFilters: [
    {
      "p.personId": "1000"
    }
  ]
})

这是Mongo playground供您参考

@ray's答案是正确的。但是您必须将他的解决方案转换为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"}]
)

相关问题 更多 >