如何通过pymongo在MongoDB中设置子子数组值

时间:2012-12-16 11:15:11

标签: python mongodb pymongo

数据:

{
    "_id" : ObjectId("50cda9741d41c81da6000002"),
    "template_name" : "common_MH",
    "role" : "MH",
    "options" : [
        {
            "sections" : [
                {
                    "tpl_option_name" : "test321",
                    "tpl_option_type" : "string",
                    "tpl_default_value" : "test321"
                }
            ],
            "tpl_section_name" : "Test"
        }
    ]
}

我可以修改选项中的tpl_default_value。$。section。$。tpl_option_name ='test321'? 我已经尝试了太多次,但我无法解决。 请帮助我,谢谢。

1 个答案:

答案 0 :(得分:0)

这是一个用于执行这些更新的错误架构,有一个用于多级位置运算符的JIRA,但尚未完成:https://jira.mongodb.org/browse/SERVER-831

理想情况下,您必须更新此客户端,然后以原子方式设置数组的该部分:

$section = {
    "tpl_option_name" : "test321",
    "tpl_option_type" : "string",
    "tpl_default_value" : "test321"    
};

db.col.update({}, {$set: {options.$.sections.1: $section}})

或者您需要更改架构。这些部分真的需要嵌入吗?我注意到你在顶层有一个tpl_section_name,但是你在那里嵌套了部分,听起来更合乎逻辑,只有一个部分应该在那里。

该文档更容易更新。