programing

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

stoneblock 2023. 4. 4. 20:51

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

저는 mongodb를 처음 접하는 사람이고 어린이 물건을 문의하려고 합니다.저는 주(州)의 컬렉션을 가지고 있고, 각 주(州)는 자도시를 가지고 있습니다.Citys 중 하나에 null인 Name 속성이 있어 앱에서 오류가 발생합니다.이름이 == null인 하위 도시를 찾으려면 주 컬렉션에 어떻게 문의해야 합니까?

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