如何在 python 中修改嵌套 pymongo 字典记录中的字段

How to modify a field in a nested pymongo dictionary record in python

我有一个具有以下结构的 mongo 数据库

{
"_id" : ObjectId("5f59c289fb28ab4476d4578b"),
"data" : [ 
    {
        "time" : "10-Sep-2020 11:33:22",
        "type" : "Med01",
        "id":123
        "expdate" : "01-Sep-2021",
        "in_stock" "Y"

    }, 
    {
        "time" : "10-Sep-2020 11:33:22",
        "type" : "Med06",
        "id":125
        "expdate" : "10-Sep-2020",
        "in_stock" "N"

    },
    {
        "time" : "10-Sep-2020 11:33:22",
        "type" : "LOC1",
        "id":103
        "expdate" : "10-Sep-2023",
        "in_stock" "Y"

    }
]

}

我想根据给定的 id 更新 in_stock 字段,例如我需要用 id 103N

我在下面尝试过,它正在工作,但我不会提前知道列表编号 (2)。

update_one({"_id": id_1}, {'$set': {"data.2.in_stock":'N'}})

我在变量中有值 2 但不确定如何在上述查询中传递它。有人可以帮忙吗?

您需要使用 $ positional operator。请注意,这将仅匹配第一个匹配的数组元素。

db.mycollection.update_one({'_id': id_1, 'data.id': 103}, {'$set': {"data.$.in_stock":'N'}})