Jeśli jest dokładnie null
(w przeciwieństwie do nieustawionego):
db.states.find({"cities.name": null})
(ale jak wskazuje javierfp, pasuje również do dokumentów, które nie mają w ogóle tablicy miast, zakładam, że tak).
Jeśli jest tak, że właściwość nie jest ustawiona:
db.states.find({"cities.name": {"$exists": false}})
Przetestowałem powyższe z kolekcją utworzoną za pomocą tych dwóch wkładek:
db.states.insert({"cities": [{name: "New York"}, {name: null}]})
db.states.insert({"cities": [{name: "Austin"}, {color: "blue"}]})
Pierwsze zapytanie znajduje pierwszy stan, drugie zapytanie znajduje drugi. Jeśli chcesz znaleźć je oba za pomocą jednego zapytania, możesz wykonać $or
zapytanie:
db.states.find({"$or": [
{"cities.name": null},
{"cities.name": {"$exists": false}}
]})
Zakładając, że Twoja kolekcja „stanów” wygląda następująco:
{"name" : "Spain", "cities" : [ { "name" : "Madrid" }, { "name" : null } ] } {"name" : "France" }
Zapytanie do znalezienia stanów z pustymi miastami wyglądałoby tak:
db.states.find({"cities.name" : {"$eq" : null, "$exists" : true}});
Częstym błędem jest tworzenie zapytań o wartości null jako:
db.states.find({"cities.name" : null});
ponieważ to zapytanie zwróci wszystkie dokumenty bez klucza (w naszym przykładzie zwróci Hiszpanię i Francję). Tak więc, jeśli nie jesteś pewien, że klucz jest zawsze obecny, musisz sprawdzić, czy klucz istnieje tak, jak w pierwszym zapytaniu.
źródło