mongodb에서 자식 개체를 쿼리하는 방법


80

mongodb를 처음 사용하고 자식 개체를 쿼리하려고합니다. 저는 주 컬렉션이 있고 각 주에는 하위 도시가 있습니다. 도시 중 하나에 null 인 Name 속성이있어 앱에서 오류가 발생합니다. 이름이 == null 인 하위 도시를 찾기 위해 State 컬렉션을 어떻게 쿼리합니까?

답변:


114

정확하다면 null(설정되지 않은 것과 반대) :

db.states.find({"cities.name": null})

(그러나 javierfp가 지적했듯이 도시 배열이 전혀없는 문서도 일치한다고 가정합니다.)

속성이 설정되지 않은 경우 :

db.states.find({"cities.name": {"$exists": false}})

이 두 삽입물로 만든 컬렉션으로 위의 내용을 테스트했습니다.

db.states.insert({"cities": [{name: "New York"}, {name: null}]})
db.states.insert({"cities": [{name: "Austin"}, {color: "blue"}]})

첫 번째 쿼리는 첫 번째 상태를 찾고 두 번째 쿼리는 두 번째 상태를 찾습니다. 하나의 쿼리로 둘 다 찾으려면 쿼리를 만들 수 $or있습니다.

db.states.find({"$or": [
  {"cities.name": null}, 
  {"cities.name": {"$exists": false}}
]})

어떻게 모든 자식 개체를 얻을 수 있습니다. 프로젝션을 사용하여 난 그냥 하나 개의 속성 무엇입니까
Yashraj basan

38

"상태"컬렉션이 다음과 같다고 가정합니다.

{"name" : "Spain", "cities" : [ { "name" : "Madrid" }, { "name" : null } ] }
{"name" : "France" }

null 도시가있는 주를 찾는 쿼리는 다음과 같습니다.

db.states.find({"cities.name" : {"$eq" : null, "$exists" : true}});

다음 과 같이 null을 쿼리 하는 것은 일반적인 실수입니다 .

db.states.find({"cities.name" : null});

이 쿼리는 키가없는 모든 문서를 반환하기 때문입니다 (이 예에서는 스페인과 프랑스를 반환합니다). 따라서 키가 항상 존재하는지 확실하지 않으면 첫 번째 쿼리에서와 같이 키가 존재하는지 확인해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.