在MongoDB中更新嵌套文档

时间:2011-11-28 07:38:18

标签: mongodb nosql

我正在尝试更新嵌套在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 个答案:

答案 0 :(得分:2)

试试这个:

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