【问题标题】:Update with Pymongo boolean field in a subdocument within a list field of a document in a MongoDB collection使用 MongoDB 集合中文档的列表字段中的子文档中的 Pymongo 布尔字段进行更新
【发布时间】:2021-12-14 07:26:15
【问题描述】:

示例数据库

下面是一个示例数据库的集合:

{
  {
    "_id": "fijo_1"
    "Procesos": [{
        "code_a": "1234",
        "code_b": "5678",
        "code_c": "9012",
        "vector_aux": ["01", "02"],
        "leido": false
    }, {
        "code_a": "0000",
        "code_b": "1111",
        "code_c": "2222",
        "vector_aux": ["03", "04"],
        "leido": false
    }  
    }]
  },
  {
    "_id": "fijo_2"
    "Procesos": [{
        "code_a": "3333",
        "code_b": "4444",
        "code_c": "5555",
        "vector_aux": ["01", "02"],
        "leido": false
    }, {
        "code_a": "6666",
        "code_b": "7777",
        "code_c": "8888",
        "vector_aux": ["03", "04"],
        "leido": false
    }  
    }]
  }
}

问题

我需要更新或更改托管在数组位置中的文档的特定字段的值,该数组位置本身就是 dbdd 文档的字段。 更具体地说,我需要将 的字段 "leido" 更改为 True “处理” 的处理编号 2,用于名为 “_id” em>fijo_2,通过实现一个过滤器,对应匹配“code_a”与“3333”,“code_b”与“4444”和“code_c”与“5555”,是一个满足多个条件的过滤器

编程语言和库:

我使用 Python 3.9 和“pymongo”库以及在 MongoDB 中创建的库。

YuTing 解决的问题

这是我现在可以使用的代码:

filter_aux = {'_id': "ES0031104316853001ED_1389"}
updtae_aux = {'$set': {"Procesos.$[element].leido": True}}
array_filters_aux= [{'element.codeA': "C1", 'element.codeB': "01", 'element.codeC': "000000000051", 'element.leido': False}]
collection.update_one(filter=filter_aux, update=updtae_aux,upsert=True, array_filters= array_filters_aux)

【问题讨论】:

    标签: mongodb dictionary mongodb-query pymongo


    【解决方案1】:

    使用$arrayFilters

    db.collection.update({
      "_id": "fijo_2"
    },
    {
      $set: {
        "Procesos.$[element].leido": true
      }
    },
    {
      arrayFilters: [
        {
          "element.code_a": "3333",
          "element.code_b": "4444",
          "element.code_c": "5555",
          
        }
      ],
      upsert: true
    })
    

    mongoplayground

    【讨论】:

    • 谢谢@YuTing !!!!!
    猜你喜欢
    • 2021-02-28
    • 1970-01-01
    • 2021-02-20
    • 2020-11-21
    • 2013-01-06
    • 1970-01-01
    • 2017-05-28
    • 1970-01-01
    • 2019-11-03
    相关资源
    最近更新 更多