Program Tip

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

programtip 2020. 10. 29. 19:14
반응형

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


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


정확하다면 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}}
]})

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

{"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});

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

참고 URL : https://stackoverflow.com/questions/4762947/how-to-query-child-objects-in-mongodb

반응형