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

完美工作,謝謝! –