2013-05-09 3 views
1

컬렉션이 포함 된 문서가 있지만 키가 누락 된 요소가 거의없고 이러한 요소를 모두 찾아야합니다.Mongodb : 일부 키가없는 임베디드 요소 찾기

var foo = {name: 'foo', embedded: [{myKey: "1", value: 3}, {myKey: "2", value: 3}]} 
db.example.insert(foo) 
var bar = {name: 'bar', embedded: [{value: 4}, {myKey: "3", value: 1}]} 
db.example.insert(bar) 

나는 그것의 내장 중 하나가 키 '의 mykey'를 가지고 있지 않기 때문에 '바'개체를 반환하는 쿼리를 필요로 예를 들면 다음과 같습니다.

은 내가 $exists을 사용하려고하지만, 포함 된 모든 요소가이

db.example.find({'embedded.myKey': {$exists: true}}).size() 
// -> 2 
db.example.find({'embedded.myKey': {$exists: false}}).size() 
// -> 0 

은 어떻게 하나 개 이상 포함 된 요소가 키 '의 mykey을'누락 된 문서를 찾을 수 있습니다 키없는 경우에만 반환?

답변

1

'값이'항상 존재하는 경우에, 당신은

db.example.find({ embedded : { $elemMatch : { value : {$exists : true}, myKey : {$exists : false}} }}) 
{ "_id" : ObjectId("518bbccbc9e49428608691b0"), "name" : "bar", "embedded" : [ { "value" : 4 }, { "myKey" : "3", "value" : 1 } ] } 
+0

는'$ elemMatch' 내 문제 해결이 명령을 시도 할 수 있습니다! 마지막 쿼리는 다음과 같습니다. '''db.example.find ({ 'embedded': { '$ elemMatch': { 'myKey': { '$ exists': false}}}})''' –