Si es exactamente null
(en lugar de no establecido):
db.states.find({"cities.name": null})
(pero como señala javierfp, también coincide con documentos que no tienen ninguna matriz de ciudades, supongo que sí).
Si es el caso que la propiedad no está configurada:
db.states.find({"cities.name": {"$exists": false}})
He probado lo anterior con una colección creada con estas dos inserciones:
db.states.insert({"cities": [{name: "New York"}, {name: null}]})
db.states.insert({"cities": [{name: "Austin"}, {color: "blue"}]})
La primera consulta encuentra el primer estado, la segunda consulta encuentra el segundo. Si desea encontrarlos a ambos con una sola consulta, puede realizar una $or
consulta:
db.states.find({"$or": [
{"cities.name": null},
{"cities.name": {"$exists": false}}
]})
Suponiendo que su colección de "estados" es como:
{"name" : "Spain", "cities" : [ { "name" : "Madrid" }, { "name" : null } ] } {"name" : "France" }
La consulta para encontrar estados con ciudades nulas sería:
db.states.find({"cities.name" : {"$eq" : null, "$exists" : true}});
Es un error común consultar nulos como:
db.states.find({"cities.name" : null});
porque esta consulta devolverá todos los documentos que carecen de la clave (en nuestro ejemplo devolverá España y Francia). Por lo tanto, a menos que esté seguro de que la clave siempre está presente, debe verificar que la clave exista como en la primera consulta.
fuente