使用MongoDB集合中文档的列表字段内的子文档中的Pymongo布尔字段进行更新 [英] Update with Pymongo boolean field in a subdocument within a list field of a document in a MongoDB collection

查看:28
本文介绍了使用MongoDB集合中文档的列表字段内的子文档中的Pymongo布尔字段进行更新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

示例数据库

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

{
  {
    "_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文档的字段。 更具体地说,我需要将&qot;进程编号2字段更改为。为满足几个条件的过滤(&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)

推荐答案

使用$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

这篇关于使用MongoDB集合中文档的列表字段内的子文档中的Pymongo布尔字段进行更新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆