In MongoDB können Sie den $exists
verwenden -Element-Abfrageoperator, um Dokumente abzugleichen, die ein bestimmtes Feld enthalten.
Sie können es auch verwenden, um Dokumente abzugleichen, die kein bestimmtes Feld enthalten.
Sie können es auch in Verbindung mit anderen Operatoren wie $nin
verwenden zum Abgleichen von Dokumenten, in denen ein bestimmtes Feld vorhanden ist, aber keinen bestimmten Wert enthält.
Beispiel
Angenommen, wir haben eine Sammlung namens cats
die folgende Dokumente enthält:
{ "_id" : 1, "name" : "Scratch", "born" : "March, 2020" } { "_id" : 2, "name" : "Meow", "weight" : 30 } { "_id" : 3, "name" : "Fluffy", "height" : 15 } { "_id" : 4, "name" : "Sox", "weight" : 40 } { "_id" : 5, "name" : null, "weight" : 20 } { "_id" : 6, "height" : 20, "born" : ISODate("2021-01-03T23:30:15.123Z") }
Diese Dokumente sind in Bezug auf die Felder, die sie haben, leicht inkonsistent. Einige haben ein weight
Feld, andere haben eine height
Feld, manche haben einen born
Feld usw.
Wir können den $exists
verwenden Operator, um Dokumente aus dieser Sammlung zurückzugeben, die ein bestimmtes Feld haben.
Beispiel:
db.cats.find( { weight: { $exists: true } } )
Ergebnis:
{ "_id" : 2, "name" : "Meow", "weight" : 30 } { "_id" : 4, "name" : "Sox", "weight" : 40 } { "_id" : 5, "name" : null, "weight" : 20 }
Wir können sehen, dass nur die Dokumente ein weight
enthalten Feld zurückgegeben.
Felder, die null
enthalten
Der $exists
Der Operator schließt Felder ein, die null
enthalten . Es unterscheidet nicht zwischen null
und nicht-null
Werte.
Beispiel:
db.cats.find( { name: { $exists: true } } )
Ergebnis:
{ "_id" : 1, "name" : "Scratch", "born" : "March, 2020" } { "_id" : 2, "name" : "Meow", "weight" : 30 } { "_id" : 3, "name" : "Fluffy", "height" : 15 } { "_id" : 4, "name" : "Sox", "weight" : 40 } { "_id" : 5, "name" : null, "weight" : 20 }
Wir können sehen, dass Dokument 5 zurückgegeben wurde, obwohl sein name
Feld ist null
.
Existiert ohne einen bestimmten Wert
Sie können $exists
kombinieren mit anderen Operatoren, um Dokumente zurückzugeben, die das Feld enthalten, aber dieses Feld enthält keinen bestimmten Wert.
Beispiel:
db.cats.find( { weight: { $exists: true, $nin: [20,30] } } )
Ergebnis:
{ "_id" : 4, "name" : "Sox", "weight" : 40 }
Dies ist ein anderes Ergebnis als das, das wir gesehen hätten, wenn wir einfach $nin
verwendet hätten ohne $exists
Betreiber.
So hätte das ausgesehen:
db.cats.find( { weight: { $nin: [20,30] } } )
Ergebnis:
{ "_id" : 1, "name" : "Scratch", "born" : "March, 2020" } { "_id" : 3, "name" : "Fluffy", "height" : 15 } { "_id" : 4, "name" : "Sox", "weight" : 40 } { "_id" : 6, "height" : 20, "born" : ISODate("2021-01-03T23:30:15.123Z") }
Dokumente, die kein bestimmtes Feld enthalten
Sie können $exists: false
verwenden um Dokumente zurückzugeben, die nicht das angegebene Feld enthalten.
Beispiel:
db.cats.find( { name: { $exists: false } } )
Ergebnis:
{ "_id" : 6, "height" : 20, "born" : ISODate("2021-01-03T23:30:15.123Z") }
In diesem Fall enthält ein Dokument in der Sammlung den name
nicht Feld.
Auf mehrere Felder prüfen
Sie können prüfen, ob mehrere Felder vorhanden sind, indem Sie sie durch ein Komma trennen.
Beispiel:
db.cats.find( {
name: { $exists: true },
height: { $exists: true }
} )
Ergebnis:
{ "_id" : 3, "name" : "Fluffy", "height" : 15 }
Dieses Beispiel gibt alle Dokumente zurück, die sowohl einen name
enthalten Feld und eine height
Feld.