2016-10-09 6 views
0

Имейте достаточно глубоко вложенный документ, часть вложенности включает объект, который является хешем ObjectID и соответствующим объектом. Мне нужно обновить все документы в коллекции, обновив только одно значение во вложенном объекте. Поэтому я знаю, что если бы я имел структуру, как:Обновление документа MongoDB с помощью подстановочного знака в поле имени

{ 
    "name" : "Bob", 
    "address" : { 
    "street" : "123 Baker St" 
    } 
} 

Я мог бы обновить все «уличные» значения с помощью следующей команды оболочки:

db.mycollection.update({}, {$set : {"address.street" : "124 Baker St"}}, {multi: true}); 

Но в моем случае, структура ISN» t так просто, у него есть эти UUID, и я хочу обновить все. Структура больше похожа на это:

{ 
    "name": "Bob", 
    "addresses" : { 
    "0934029572035702834234092834" : { 
     "street" : "123 Baker St" 
     }, 
    "0904958304959879873876862378" : { 
     "street" : "123 Baker St" 
     } 
    } 
} 

< OK не большой пример б/с в реальном мире вы не хотели бы, чтобы изменить эти адреса, чтобы быть таким же, но предположим на минуту, что я делаю. Как получить все документы, чтобы изменить все значения «улицы» во вложенном объекте «адреса» без необходимости делать это OID по OID?

+0

Это действительно ваша структура документа? Я бы настоятельно предложил изменить его, когда это возможно. Я бы ожидать что-то вроде: { «Имя: "Боб", "адреса": [{ "типа": "ваши странные Guid как штуковина", "улица": "123 Baker St"}, { type: «your 2nd guid thingy» «street»: «123 Baker St»}]} Таким образом вы можете обновлять элементы массива. Структура currunt заставляет команду update, например, «addresses.yourguidthingy.street»: «new улица "вместо обновления элемента массива, такого как" addresses.street ":« новая улица ». Надеюсь, это немного ясно ... – HoefMeistert

+0

Как я уже сказал, это немного надуманный пример (на самом деле я не занимаюсь адресами) , но да, вложенный документ использует ключ GUID и значение объекта для каждого элемента родительского вложенного документа. Возможно, лучшим примером является то, что они представляют , но я столкнулся с ситуацией, когда в истории моментальных снимков должно быть свойство, обновленное во всех моментальных снимках. – Paul

ответ

0

Я полагаю, вы знаете, что UUID-х: P Это не массив, но вложенная структура документа, который приходит в команду обновления, как:

db.mycollection.update({}, {$set : {"addresses.0934029572035702834234092834.street" : "124 Baker St"}}, {multi: true}); 
Смежные вопросы