2012-09-19 5 views
2

집합에 포함 된 문서를 업데이트하거나 존재하지 않는 경우 삽입하는 방법은 무엇입니까 단일 쿼리? 다음과 같은 문서가 있다고 가정 해보십시오. 그리고 '레코드'는 임베디드 된 문서의 집합입니다.MongoDB, 임베디드 문서를 업데이트하거나 삽입하려면 어떻게해야합니까?

{ 
    id: "1", 
    records: [ 
     {userId:"5", userData: "..."}, 
     {userId:"12", userData: "..."}, 
     {userId:"27", userData: "..."} 
    ] 
} 

'레코드'를 별도의 쿼리에 삽입하거나 업데이트하는 방법을 알고 있습니다. 그러나 이러한 쿼리를 조합하여 MySQL의 중복 UPDATE UPDATE와 유사하게 작동합니까? 임베디드 된 문서가 있는지 알아보기 위해 다른 쿼리를 실행하는 것을 피하고 싶습니다.

db.myCollection.update(
    {id:"1", records.userId:"12"}, 
    {records.$.userData:{"... new data ..."}} 
); 

db.myCollection.update(
    {id:"1"}, 
    {records: 
     {$push: 
      {userId: "33", userData: {"... new data ..."}} 
     } 
    } 
); 

감사

+0

그럼 난 대답을했다 를 사용할 수 있지만 스택 오버플로가 코멘트로 변환에 결정했다. –

+0

안녕하세요. Na.z.Camp, 아직이 '댓글'에 대한 링크가 있습니까? – Jaepil

+0

가능한 복제본 http://stackoverflow.com/q/10277174 – JohnnyHK

답변

0
+0

안녕 SCB, 내가 아는 한 upsert는 ** 임베디드 ** 문서에는 적용되지 않습니다. 참고로, 주 문서의 '레코드'세트 만 수정하고 싶습니다. – Jaepil

+0

업데이트 명령에서/* upsert */true 조합을 사용하고 위치 연산자 $를 사용하여 수행 할 수 있습니까? – SCB

+1

@SCB에서 MongoDB 문서는 "삽입 연산자가 삽입 된 문서에서 필드 이름으로 $를 사용하기 때문에 upsert 연산에 위치 연산자 $를 사용하지 마십시오"라고 말합니다. 여기를 참조하십시오 : http://docs.mongodb.org/manual/reference/operator/positional/ – Kyle

관련 문제