Если это точно 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});
потому что этот запрос вернет все документы без ключа (в нашем примере он вернет Испанию и Францию). Итак, если вы не уверены, что ключ всегда присутствует, вы должны проверить, существует ли ключ, как в первом запросе.
источник