MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

MongoDB $istnieje

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.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Co to jest operator $unwind w MongoDB?

  2. Jak ściągnąć jedną instancję elementu w tablicy w MongoDB?

  3. MongoDB i przyłącza

  4. Mongoimport pliku JSON

  5. MongoDB :kolejność indeksów i kolejność zapytań muszą być zgodne?