2013-09-30 5 views
1

Я пытаюсь запустить несколько обновлений поля объекта в массиве. Структура выглядит так:MongoDB множественное обновление во вложенном объекте не работает

{ 
rs:[ 
    {uid:"123", ufc:"bla"}, 
    {uid:"123", ufc:"foo"}, 
    //... 
    ] 
} 

По какой-то причине обновляется только первое поле. Я читал, что я должен использовать multi:true, чтобы решить эту проблему, но это все равно.

Я пробовал:

db.mycollection.update({"rs.uid": "123"}, 
        {$set: {"rs.$.ufc":"test"}}, 
        false, true 
       ) 

И:

db.mycollection.update({"rs.uid": "123"}, 
        {$set: {"rs.$.ufc":"test"}}, 
        {multi: true} 
       ) 

, вероятно, связано с вложенной структурой? Благодарю.

ответ

2

Я думаю, что вы попали в такую ​​же проблему, как указано в этом question

. В качестве решения либо дождаться следующего issue, который нужно решить или обновить элементы массива один за другим. В вашем запросе multi означает обновление нескольких документов, а не элементов любого поля массива. Запрос работает следующим образом: обновите все документы, у которых есть элемент в поле rs с uid «123».

Конечно, в качестве альтернативы, если возможно, измените структуру вашей схемы, поддерживая элементы вашего массива rs, являющегося самим документом.

Надеюсь, что это поможет

+0

Ничего себе, это невозможно. Я проголосовал за Джиру. Подходы, предложенные в потоке, похожи на то, что могут потреблять много памяти ... Я имею в виду, что он должен загружать всю коллекцию в память. Также делайте это асинхронно ... ожидая завершения каждого обновления ... pffft. Я мог бы реструктурировать свои документы, как вы говорите, или просто пропустить запланированные функции на данный момент. – Ixx

+0

С таким количеством голосов и запросов, я думаю, они предоставят чистое решение. Хорошо, надеюсь ... – fgakk

Смежные вопросы