Обновление вложенного документа в MongoDB - PullRequest
2 голосов
/ 28 ноября 2011

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

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

До:

{
  '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,измените данные и вставьте их в базу данных, но мне было интересно, есть ли лучший способ, о котором я не знаю.

1 Ответ

2 голосов
/ 28 ноября 2011

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

coll.update({ :id = > id }, { '$set' => {
    "evaluators.#{evaluator_name}" => {
        'adequacy' => adequacy, 'fluency' => fluency
    }
}})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...