在MongoDB中更新数组内的嵌入式对象数组

时间:2014-08-14 04:04:54

标签: mongodb

我有一个类似的文件:

{
"_id": "1000",
"answer_count": 0,
"answer_order": 0,
"fields": [{
    "name": "client_name",
    "id": "com28",
    "title": "Client",
    "required": true,
    "instruct": "",
    "dateType": "text"
}, {
    "name": "id_radio",
    "id": "com26",
    "title": "hobby",
    "required": false,
    "instruct": "",
    "value": [{
        "name": "Please select",
        "selected": true,
        "lid": "-1",
        "defaultTip": true
    }, {
        "name": "option1",
        "selected": false,
        "lid": "0"
    }, {
        "name": "option2",
        "selected": false,
        "lid": "1"
    }, {
        "name": "option3",
        "selected": false,
        "lid": "2"
    }]
}]
}

我试试:

db.survey_stat.update({
     "fields.id" : "com26", 
     "fields.value.name":"option1"
 },
 {
     "$inc":{
         "fields.0.value.$.selected_count":1
     }
 })

但它不会更新任何字段。如何在数组中包含特定字段?

1 个答案:

答案 0 :(得分:0)

要更改的fields.id: "com26"数组条目为fields.1而不是fields.0。这意味着您正在尝试更改fields数组的错误条目。

不幸的是,$-placeholder只能在字段路径中使用一次。当你有两个嵌套数组时,它不会起作用。关于此问题有an open bugtracker ticket。唯一的解决方法是检索并替换嵌套字段发生的整个数组条目。