2011-11-28 13 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 }, 
    } 
} 

私は、ルビーに文書全体をロードするためのクエリを実行データを変更してDBにそれを再挿入することができ私が知らないより良い方法があるのだろうかと思っていました。

答えて

2

はこのお試しください:

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

は完全に働いた、ありがとう! –

関連する問題