2013-08-22 7 views
0

더 많은 업데이트를 연결하는 방법이 있습니까? 예를 들어 동일한 요소에서 더 많은 값을 변경하고 싶습니다. 그래서 이것을 가지고 ...Mongodb, concat 더 많은 쿼리 하나의 업데이트

{ 
    cc: [ 
      { user_id: "1", hasSeen:true} 
     ,{ user_id: "2", hasSeen:false} 
     ,{ user_id: "3", hasSeen:false} 

    ] 
    ,conversation: [{ 
     user_id: "1", 
     text: "message by 1, to 2and3" 
    }] 
} 

... 나는 새로운 대화 개체를 푸시하고 모든 hasSeen 값을 변경하고 싶습니다.

첫 번째 사항은 아무런 문제가 없습니다. 단지 새 대화 개체 만 푸시합니다. 그리고 그것은 작동합니다 ...

...update(
     { _id : _param.conversation_id } 
     ,{ $push:{ conversation:{user_id:"2",text:"message by 2, to 1,3"} }} 
    ) 
    .exec(function(err, numAffected, rawResponse) { 
    }); 

그러나 나는 또한 "hasSeen"값을 동시에 변경하고 싶습니다. 그것은 가능한가? 하나의 검색어로이 작업을 수행 할 수 있습니까? 아니면 두 개의 쿼리로 나누어야합니까?

ps : 나는 몽구스를 사용합니다.

답변

0

현재 위치 연산자 (여기서 내가 필요하다고 생각하는)는 $inc 또는 $set의 목록을 반복하여 해당 하위 문서 값을 변경하는 조건부 업데이트 유형을 수행 할 수있는 방식으로 작동하지 않습니다 .

https://jira.mongodb.org/browse/SERVER-6566?page=com.atlassian.jira.plugin.system.issuetabpanels:changehistory-tabpanel에 도움을 줄 수있는 JIRA가 있지만 "확실하지 않은 기능"아래에 있습니다.

현재이 문제를 해결하는 것이 좋습니다.

+0

감사합니다. Sammaye! –

+1

@CodeGirl 한 가지 방법은 이것이 원자 적이어야하는 경우 실제로이 클라이언트 측을 업데이트하고 한 번에 save()를 사용하여 문서를 푸시하는 것입니다. 그러면 경쟁 조건이 생성 될 수 있습니다 – Sammaye

관련 문제