2011-11-28 150 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

完美工作,谢谢! –