W MongoDB możesz użyć $exists elementowy operator zapytania w celu dopasowania dokumentów zawierających określone pole.
Możesz go również użyć do dopasowania dokumentów, które nie zawierają określonego pola.
Możesz go również używać w połączeniu z innymi operatorami, takimi jak $nin aby dopasować dokumenty, w których dane pole istnieje, ale nie zawiera określonej wartości.
Przykład
Załóżmy, że mamy kolekcję o nazwie cats który zawiera następujące dokumenty:
{ "_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") }
Dokumenty te są nieco niespójne w odniesieniu do pól, które mają. Niektóre mają weight pole, inne mają height pole, niektóre mają born pole itp
Możemy użyć $exists operatora, aby zwrócić dokumenty z tej kolekcji, które mają określone pole.
Przykład:
db.cats.find( { weight: { $exists: true } } ) Wynik:
{ "_id" : 2, "name" : "Meow", "weight" : 30 }
{ "_id" : 4, "name" : "Sox", "weight" : 40 }
{ "_id" : 5, "name" : null, "weight" : 20 }
Widzimy, że tylko te dokumenty, które zawierają weight pola są zwracane.
Pola zawierające null
$exists operator zawiera pola zawierające null . Nie rozróżnia null i inne niż null wartości.
Przykład:
db.cats.find( { name: { $exists: true } } ) Wynik:
{ "_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 }
Widzimy, że dokument 5 został zwrócony, mimo że jego name pole jest null .
Istnieje bez określonej wartości
Możesz połączyć $exists z innymi operatorami, aby zwrócić dokumenty zawierające to pole, ale to pole nie zawiera określonej wartości.
Przykład:
db.cats.find( { weight: { $exists: true, $nin: [20,30] } } ) Wynik:
{ "_id" : 4, "name" : "Sox", "weight" : 40 }
To inny wynik niż ten, który zobaczylibyśmy, gdybyśmy po prostu użyli $nin bez $exists operatora.
Oto, jak by to wyglądało:
db.cats.find( { weight: { $nin: [20,30] } } ) Wynik:
{ "_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") } Dokumenty, które nie zawierają określonego pola
Możesz użyć $exists: false zwracać dokumenty, których nie zawierać określone pole.
Przykład:
db.cats.find( { name: { $exists: false } } ) Wynik:
{ "_id" : 6, "height" : 20, "born" : ISODate("2021-01-03T23:30:15.123Z") }
W takim przypadku jeden dokument w kolekcji nie zawiera name pole.
Sprawdź wiele pól
Możesz sprawdzić, czy istnieje wiele pól, oddzielając je przecinkami.
Przykład:
db.cats.find( {
name: { $exists: true },
height: { $exists: true }
} ) Wynik:
{ "_id" : 3, "name" : "Fluffy", "height" : 15 }
Ten przykład zwraca wszystkie dokumenty, które zawierają zarówno name pole i height pole.