Глубокое обновление документа БД Монго

У меня есть следующая структура документа в документе Mongo DB 3.0:

{
    id: "ID",
    name: "NAME",
    items:[
        {
            id:"100",
            name:"Item Name",
            fields:[
                {a:"field 1", b:44},
                {a:"field 2", b:56},
            ]
        }
    ]
}

Мне нужно обновить "поле 2" до значения 72, чтобы результат был следующим:

{
    id: "ID",
    name: "NAME",
    items:[
        {
            id:"100",
            name:"Item Name",
            fields:[
                {a:"field 1", b:44},
                {a:"field 2", b:72},
            ]
        }
    ]
}

1 ответ

Решение

К сожалению, вы наткнулись на очень раздражающее ограничение MongoDB.

Вы можете обновить отдельные записи массива с помощью $ placeholder. Но, к сожалению, вы можете иметь только один из них в названии поля. Это означает, что массивы в массивах нельзя обновить одним запросом.

Возможный обходной путь заключается в использовании find запросить копию всего items.$.fields массив, отредактируйте его на прикладном уровне, а затем выполните обновление, которое заменяет весь массив.

На официальном багтрекере есть открытый тикет об этой проблеме, который имеет "главный" приоритет. Но билет существует с 2010 года, так что я не задерживаю дыхание.

Другие вопросы по тегам