2013-02-05 2 views
1

MongoDB v2.2.3의 특정 기준과 일치하는 더 큰 배열에 포함 된 배열에서 발견 된 특정 필드를 업데이트해야하는 문제가 있습니다.MongoDB 조건을 충족하는 서브 어레이 필드 업데이트

다음 mongodb 샘플 문서가 있습니다.

{ 
    _id: ObjectId("50be30b64983e5100a000009"), 
    user_id: 0 
    occupied: { 
    Greece: [ 
     { 
     user_id: 3, 
     deadline: ISODate("2013-02-08T19:19:28Z"), 
     fulfilled: false 
     }, 
     { 
     user_id: 4, 
     deadline: ISODate("2013-02-16T19:19:28Z"), 
     fulfilled: false 
     } 
    ], 
    Italy: [ 
     { 
     user_id: 2, 
     deadline: ISODate("2013-02-15T19:19:28Z"), 
     fulfilled: false 
     } 
    ] 
    } 
} 

occupied 배열의 각 국가에는 고유 한 배열 집합이 있습니다.

user_id이 0 인 문서를 찾으려면 "deadline": {$gt: ISODate(current-date)}이있는 요소에 대해서만 occupied.Greece 배열을 검색하고 개별 "fulfilled"필드를 true로 변경하십시오.

나는 $$elemMatch 연산자를 시도했지만 그들은 단지 하나의 쿼리에서 첫 번째, 배열 요소 나 주어진 기준에 따라 모든 자격 요소와 일치하고 동일한 쿼리를 실행하지 않고 업데이트를 만들기 위해 필요한 반면 일치 여러 번 또는 배열 클라이언트 측을 처리해야합니다.

일반 문서 업데이트를위한 서버 측 솔루션은 단일 문서에 없습니까? 이 솔루션은 보편적이어야하지만 PHP를 사용하여 개발 중입니다.

답변

0

저는 이것이 가능하지 않습니다. the documentation에서 :

위치 $ 운영자가 업데이트 쿼리 선택첫 경기에 대한 자리 표시 자 역할을 기억하십시오. [강조가 아닙니다.]

이 내용은 MongoDB Jira에서 SERVER-1243하에 추적됩니다.

jira에는 상당히 많은 관련 기능 요청이 있는데, 대부분 'virtual collections'이라는 주제 아래 있습니다.

+0

적어도이 더러운 솔루션을 원했습니다. 그럼에도 불구하고 jira 링크를 가져 주셔서 감사합니다. –

관련 문제