Глубокое обновление документа БД Монго
У меня есть следующая структура документа в документе 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 года, так что я не задерживаю дыхание.