как запросить дочерние объекты в mongodb
Я новичок в mongodb и пытаюсь запросить дочерние объекты. У меня есть коллекция Штатов, и в каждом штате есть дочерние города. Один из городов имеет свойство Name, которое равно null, что вызывает ошибки в моем приложении. Как бы я запросил государственные коллекции, чтобы найти дочерние города, которые имеют имя == null?
2 ответа:
если это точно
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" }
запрос на поиск состояний с нулевыми городами будет:
db.states.find({"cities.name" : {"$eq" : null, "$exists" : true}});
Это общие ошибка для запроса нулей как:
db.states.find({"cities.name" : null});
потому что этот запрос вернет все документы, не имеющие ключа (в нашем примере он вернет Испанию и Францию). Поэтому, если вы не уверены, что ключ всегда присутствует, вы должны проверить, что ключ существует, как и в первом запросе.