当前位置: 首页 > 知识库问答 >
问题:

如何更新子文档嵌套数组中的子文档

阮飞翔
2023-03-14

将mongodb与pymongo一起使用,我有以下文档:

{
    "_id" : ObjectId("5515d697453d9a1975123e0b"),
    "Study_Attributes" : [ 
        {
            "value" : "183",
            "tag" : "height",
            "unit" : "cm"
        }, 
        {
            "value" : "92",
            "tag" : "weight",
            "unit" : "kg"
        }
    ],
    "Center_Project_Name" : "prj001",
    "Study_Abstract" : "THIS IS THE ABSTRACT",
    "Study_Description" : "---",
    "Study_Title" : "Study of Wheat",
    "Center_Name" : "cc001",
    "samples" : [ 
        {
            "Scientific_Name" : "aribido",
            "Anonymized_Name" : "XXX001",
            "Description" : "cress",
            "Characteristics" : [ 
                {
                    "value" : "",
                    "id" : ObjectId("5515d6f5453d9a1975123e0c"),
                    "tag" : "",
                    "unit" : ""
                }
            ],
            "Sample_Name" : "XXX001",
            "Common_Name" : "mustard cress",
            "Term_Accession_Number" : "19879",
            "Individual_Name" : "xx1",
            "Taxon_ID" : "19879",
            "_id" : ObjectId("5515d6f5453d9a1975123e0d"),
            "Term_Source_REF" : "TODO:ONTOTLOGY_ID",
            "Protocol_REF" : "TODO:PROTOCOL_STRING",
            "Source_Name" : "cthulu"
        }
    ]
}

我想更新示例子文档(这是一个数组元素,因为可能有多个示例)。我有以下代码,但它不工作...

EnaCollections.update(
            {"_id": o.ObjectId(study_id), "samples._id": o.ObjectId(sample_id)},
            {'$set:': {
                "samples.$.Source_Name": sample['Source_Name'],
                "samples.$.Characteristics": spec_attr,
                "samples.$.Term_Source_REF": "TODO:ONTOLOGY",
                "samples.$.Protocol_REF": "TODO:PROTOCOL_STRING",
                "samples.$.Sample_Name": sample['Anonymized_Name'],
                "samples.$.Individual_Name": sample['Individual_Name'],
                "samples.$.Description": sample['Description'],
                "samples.$.Taxon_ID": sample['Taxon_ID'],
                "samples.$.Scientific_Name": sample['Scientific_Name'],
                "samples.$.Common_Name": sample['Common_Name'],
                "samples.$.Anonymized_Name": sample["Anonymized_Name"],
            }}
        )

谁能告诉我这个有什么问题吗?

共有1个答案

蒲魁
2023-03-14

请看一下您的update语句,其中您使用冗余的指定了$set修饰符

。。。{'$set:':{…

只要删除它,所有将工作:)

 类似资料:
  • 我有一个深度嵌套的文档结构,如下所示: 我正在尝试更新集合以插入新配置,如下所示: 我正在mongo(Python)中尝试类似的内容: 但是,我得到了“如果没有包含数组的相应查询字段,则无法应用位置运算符”错误。在mongo这样做的正确方式是什么?这是mongo v2。4.1.

  • 假设我们有以下集合,我对此没有什么问题: > 我想增加“item_name”的价格:“my_item_two”,如果它不存在,应该将它追加到“items”数组中。

  • 问题内容: 我正在使用MongoDB数据库,该数据库的收集模型包括 班级 , 学生 , 学科 和[学术] 表现 。以下是基于猫鼬的架构和模型: 该集合的文件是最复杂的地段; 示例文档为: 我能够使用以下代码检索现有的班级文档并将其添加到分数中: 但是,如何添加/更新/删除该特定学生的成绩?我需要能够通过以下方式与集合进行交互: 检索所有学生或特定学生的分数(检索数组中的特定元素) 为特定主题添加/

  • 我有一份这样的文件: 我想通过将其与数量字段(2*800)相乘来更新价格字段,其中的结果将更新/分配给价格。(对于本例,价格更新为1600)。 更新后的文档: 我的选择查询如下: 我怎样才能做到这一点?

  • 我的mongoDB记录就像在这个链接更新嵌套数组mongob和示例记录如下,想要更新嵌套文档“参数”数组中的一个字段,前提是它满足一些条件(_id:“04”,操作。_id:“100”和operations.parameters.pid:“012”),此更新查询UPDATES错误嵌套记录(operations.parameters.pid:“011”),请帮助我哪里出错了: 我的更新查询如下: 我使

  • 我需要更新Mongo DB中另一个文档内的数组中的一个文档