2013-06-07 5 views
1

Linux에서 MongoDB v.2.4.4-pre-를 실행합니다. 다음과 같은 요소가 포함 된 컬렉션이 있습니다.복잡한 MongoDB 쿼리 (중첩 수준 높음)

{ 
    num: 1, 
    arr: [ 
     { 
      a: 'a1', 
      b: 'b1' 
     }, 
     { 
      a: 'a2', 
      b: 'b2' 
     } 
    ] 
} 

두 값 : "numVal"및 "arrVal"이 있습니다. "numVal"은 숫자이고 "arrVal"은 문자열의 배열입니다.

"num"== "numVal"및 "arr"요소의 "a"속성이 동일한 색인을 가진 "arrVal"요소와 동일한 모든 요소를 ​​선택하는 것이 임무입니다.

예를 들어 위에서 설명한 요소를 얻으려면 numVal = 1 및 "arrVal"= [ 'a1', 'a2']가 필요합니다.

올바른 요청을 작성하도록 도와 줄 수 있습니까? "$ where"선택기를 기반으로하는 솔루션이 있지만 더 나은 방법이 있다고 생각합니다.

현재 쿼리는 다음과 같다 : 대부분의 경우 1 또는 2 것, 최대 수량은 20 근처 "$"에 의해 필터링 된 항목의

db.collection.find({ num: 1, $where: "this.arr.length == 2 && this.arr[0] && this.arr[0].a == 'a1' && this.arr[1] && this.arr[1].a == 'a2'" }) 

또는

db.collection.find({ num: 1, 'arr.a': { $all: [ 'a1', 'a2' ] }, arr: { $size: 2 }, $where: "this.arr[0].a == 'a1' && this.arr[1].a == 'a2'" }) 

번호.

추신 DB를 재구성 할 수 없습니다.

답변

1

성공적 다음 질의 사용할 수 있습니다

db.collection.find({ num: 1, arr: { $size: 2 }, 'arr.0.a': 'a1', 'arr.1.a': 'a2' })