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

나는 (루비) 일을 시도했습니다 :

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

이 완벽하게 작동, 감사합니다! –

관련 문제