MongoDB: как обновить встроенные документы в массиве

#mongodb

#mongodb

Вопрос:

У меня есть следующий документ:

 {_id: '4eb79ee1e60fc603788e7259',
Name: 'name', 
Subsidiaries: [
  { _id: '4eb79eeae60fc603788e7271',
   Location: 'location1'},
  { _id: 'subid2',
   Location: 'location2'},
]}
  

Я хочу обновить местоположение дочерней компании:

 db.Departments.update({ "_id" : ObjectId("4eb79ee1e60fc603788e7259"), "Subsidiaries._id" : ObjectId("4eb79eeae60fc603788e7271") }, { "$set" : { "Subsidiaries.Location" : "City" } })
  

Но MongoDB возвращает ошибку: «не удается добавить в массив, используя строковое имя поля [Местоположение]»

Ответ №1:

Вы должны использовать оператор $ poistional для обновления встроенных документов,

 db.Departments.update(
     { "_id" : ObjectId("4eb79ee1e60fc603788e7259"),
       "Subsidiaries._id" : ObjectId("4eb79eeae60fc603788e7271") },
     { "$set" : { "Subsidiaries.$.Location" : "City" } }
 )
  

Комментарии:

1. в моем случае это говорит о том, что не удается добавить в массив, используя строковое имя поля [$] , хотя я вижу, что приведенный выше документ и мой документ точно такие же.