2013-08-22 4 views
1

user_id = "2"로 설정 한 경우 hasSeen : false로 설정된 user_id = "2"를 제외한false를 어떻게 설정합니까? Mongodb, 배열의 각 필드를 업데이트하십시오.

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

    ] 
} 

나는
.update({ $set:{ 'cc.$.hasSeen':false } }) 

을 tryed하지만

+1

불행히도 위치 연산자는 처음 발견 된 현재 JIRA (https://jira.mongodb.org/browse/SERVER-1243)에서만 작동하며 현재 Google 검색 중입니다. http://stackoverflow.com/questions/14855246/position-operator-to-update-nested-arrays 배열 – Sammaye

+0

다시 한번 감사드립니다. Sammaye! –

답변

1

이 한 번의 조작으로 가능하지 않다 ... 작동하지 않습니다. 각 하위 문서 값을 업데이트 할 수 있습니다. 업데이트에서 getLastError를 사용하여 당신은 당신이 업데이트해야하는 횟수를 확인할 수 있습니다 예 :

모든 hasSeen 값을 설정

1) false에 :

값을 볼 수있다 user_id=2을 설정
db.test.update({ "cc.hasSeen": true}, 
       { $set: { "cc.$.hasSeen" : false }}) 
while (db.getLastErrorObj()['n'] > 0) { 
    db.test.update({ "cc.hasSeen": true}, 
        { $set: { "cc.$.hasSeen" : false }}) 
} 

2) 2 :

db.test.update({ "cc.user_id": "2"}, 
       { $set: { "cc.$.hasSeen" : true }}) 

그러나 이것은 단일 원자 작업 대신 n 작업이 있으므로 경쟁 조건을 도입합니다.

관련 문제