2011-11-28 4 views
2

Я пытаюсь обновить хэш, который вложен в документ MongDB. Я знаю о функции $push для массивов и $set для полностью перезаписывания элементов, но я не могу получить то поведение, которое я ищу.Обновление вложенного документа в MongoDB

Вот что я пытаюсь получить:

До:

{ 
    'id' => 1234, 
    'evaluators' => { 
    'A' => { 'x' => 2, 'y' => 4 }, 
    } 
} 

Ожидаемо, после того, как:

{ 
    'id' => 1234, 
    'evaluators' => { 
    'A' => { 'x' => 2, 'y' => 4 }, 
    'B' => { 'x' => 3, 'y' => 5 }, 
    } 
} 

Я пробовал делать (в Ruby) :

coll.update({ :id => id }, 
      { '$set' => { 
       'evaluators' => { 
        evaluator_name => { 'adequacy' => adequacy, 
             'fluency' => fluency } 
       } 
      } }) 

Но перезаписывает содержимое моей evaluators хэш, и я в конечном итоге с:

{ 
    'id' => 1234, 
    'evaluators' => { 
    'B' => { 'x' => 3, 'y' => 5 }, 
    } 
} 

Я мог бы сделать запрос, чтобы загрузить весь документ в Ruby, изменить данные и повторно вставить его в БД но мне было интересно, есть ли лучший способ, о котором я не знаю.

ответ

2

Попробуйте это:

coll.update({ :id = > id }, { '$set' => { 
    "evaluators.#{evaluator_name}" => { 
     'adequacy' => adequacy, 'fluency' => fluency 
    } 
}}) 
+0

Работал отлично, спасибо! –

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