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를 재구성 할 수 없습니다.