2017-12-26 21 views
0

잘 작동하는 쿼리가 있습니다.Mongodb 질의를 사용하여 알 수없는 키 아래에서 임베디드 값을 찾습니다.

db.getCollection('device').find({"device_profile.XC.grade":"i"}) 

및 I는 디바이스 프로파일 후 모든 키에 값을 가져 쿼리를 필요이

db.getCollection('device').find({"device_profile.XC.grade":"i"}) 

같은 다른 질의. . 즉,

db.getCollection ('장치') 같은 것을 찾아 ({ ".. device_profile * 등급을": "I"}) *는 XA, XC, AB 될 수

또는 어떤 키 ..

나는 시도했다 db.getCollection('device').find({"device_profile.$.grade":"i"}) 어떤 결과도 가져 오지 않는다.

어떻게 하시겠습니까?

답변

0

$ 여기서으로 필터링을 위해 맞춤 JavaScript를 평가할 수 있습니다.

db.device.find({ $where: "Object.keys(this.device_profile || {}).find(key => this.device_profile[key].grade === 'i')" }) 

에서이 우리가 하나의 문서 우리는 'i'를 동일한 등급을 가진 사람을 찾기 위해 키의 반복 할 수 있도록

0

당신은 명명 된 속성에 키를 할당하여 디자인을 개선 할 수 있습니다 빠른 쿼리를 위해 성적 필드에 색인을 추가하십시오. (선호) 당신이 구조를 변경할 수있는 옵션 아래

db.getCollection('device').find({"device_profile.grade":"i"}‌​). 

같은

device_profile:[{key:"XC", grade":"i"},{key:"XA", grade":"e"} ] 

쿼리와 같은

뭔가.

$objectToArray 명명 된 문서를 키 값 쌍으로 변환 한 후 $in 표현식을 사용하면 성적 배열에 전달 된 입력 값이 포함될 때 부울 값을 출력 할 수 있습니다. 일반 쿼리에서 집계 식 사용을 허용 $expr와 쿼리 아래 3.6 사용을 위해

var criteria = 
{ 
    "$let": { 
    "vars": { 
     "device_profile": { 
     "$objectToArray": "$device_profile" 
     } 
    }, 
    "in": { 
     "$in": [ 
     "i", 
     "$$device_profile.v.grade" 
     ] 
    } 
    } 
} 

.

db.collecion_name.find({"$expr":criteria}) 

$redact 연산자 쿼리 아래 3.4 사용을 위해 보관 $$ 할 때 다른 경기 $$ 집계 쿼리 PRUNE 문서.

다른 모든 버전의 경우 mongo의 문서를 가져오고 클라이언트 측 일치를 수행하십시오./where $ javascript를 사용할 수있는 연산자.