Wenn es genau ist null
(im Gegensatz zu nicht gesetzt):
db.states.find({"cities.name": null})
(aber wie javierfp betont, stimmt es auch mit Dokumenten überein, die überhaupt kein Städte-Array haben, ich gehe davon aus, dass dies der Fall ist).
Wenn die Eigenschaft nicht festgelegt ist:
db.states.find({"cities.name": {"$exists": false}})
Ich habe das Obige mit einer Sammlung getestet, die mit diesen beiden Beilagen erstellt wurde:
db.states.insert({"cities": [{name: "New York"}, {name: null}]})
db.states.insert({"cities": [{name: "Austin"}, {color: "blue"}]})
Die erste Abfrage findet den ersten Status, die zweite Abfrage den zweiten. Wenn Sie beide mit einer Abfrage finden möchten, können Sie eine $or
Abfrage durchführen:
db.states.find({"$or": [
{"cities.name": null},
{"cities.name": {"$exists": false}}
]})
Angenommen, Ihre "Staaten" -Sammlung lautet wie folgt:
{"name" : "Spain", "cities" : [ { "name" : "Madrid" }, { "name" : null } ] } {"name" : "France" }
Die Abfrage zum Finden von Staaten mit Nullstädten wäre:
db.states.find({"cities.name" : {"$eq" : null, "$exists" : true}});
Es ist ein häufiger Fehler , nach Nullen zu fragen:
db.states.find({"cities.name" : null});
da diese Abfrage alle Dokumente zurückgibt, denen der Schlüssel fehlt (in unserem Beispiel werden Spanien und Frankreich zurückgegeben). Wenn Sie nicht sicher sind, dass der Schlüssel immer vorhanden ist, müssen Sie überprüfen, ob der Schlüssel wie in der ersten Abfrage vorhanden ist.
quelle