W MongoDB możesz użyć $type elementowy operator zapytania do filtrowania kolekcji dokumentów na podstawie typu BSON. Zwraca tylko te dokumenty, które mają określony typ BSON w określonym polu.
Podajesz pole i typ BSON oraz $type zwróci wszystkie pasujące dokumenty.
Przykład
Załóżmy, że wstawiamy następujące dokumenty do zbioru o nazwie employees :
db.employees.insertMany([
{ _id: 1, name: "Sandy", remuneration: "Too Much!!!" },
{ _id: 2, name: "Sarah", remuneration: NumberInt(128000) },
{ _id: 3, name: "Fritz", remuneration: 25000 },
{ _id: 4, name: "Chris", remuneration: NumberDecimal("45000.75") },
{ _id: 5, name: "Beck", remuneration: "10% commission" },
{ _id: 6, name: "Peter", remuneration: "70K" },
{ _id: 7, name: "Homer", remuneration: null },
]) Każdy dokument zawiera pracownika wraz z wynagrodzeniem tego pracownika.
Jednak chociaż każdy dokument ma remuneration widzimy, że nie ma spójności między dokumentami w odniesieniu do typu BSON używanego w tym polu.
Możemy użyć $type operator zapytania, aby zwrócić tylko te dokumenty, dla których remuneration pole jest określonego typu BSON.
Przykład:
db.employees.find( { remuneration: { $type: "double" } } ) Wynik:
{ "_id" : 3, "name" : "Fritz", "remuneration" : 25000 }
W tym przypadku tylko jeden dokument ma typ BSON typu double w remuneration pole.
Zobaczmy, które z nich zawierają ciągi:
db.employees.find( { remuneration: { $type: "string" } } ) Wynik:
{ "_id" : 1, "name" : "Sandy", "remuneration" : "Too Much!!!" }
{ "_id" : 5, "name" : "Beck", "remuneration" : "10% commission" }
{ "_id" : 6, "name" : "Peter", "remuneration" : "70K" } number Alias
Możesz użyć number alias jako wygodny sposób zwracania dokumentów zawierających typy liczbowe.
Alias numeru pasuje do następujących typów BSON:
double32-bit integer64-bit integerdecimal
Przykład:
db.employees.find( { remuneration: { $type: "number" } } ) Wynik:
{ "_id" : 2, "name" : "Sarah", "remuneration" : 128000 }
{ "_id" : 3, "name" : "Fritz", "remuneration" : 25000 }
{ "_id" : 4, "name" : "Chris", "remuneration" : NumberDecimal("45000.75") } Sprawdź wiele typów
Możesz sprawdzić wiele typów, dostarczając tablicę typów BSON.
Przykład:
db.employees.find( {
remuneration: { $type: ["double", "int", "null"] }
} ) Wynik:
{ "_id" : 2, "name" : "Sarah", "remuneration" : 128000 }
{ "_id" : 3, "name" : "Fritz", "remuneration" : 25000 }
{ "_id" : 7, "name" : "Homer", "remuneration" : null } Filtruj według numeru
Każdy typ BSON ma odpowiedni numer i alias (zgodnie z dokumentacją MongoDB).
W poprzednich przykładach użyto aliasu. Możesz alternatywnie użyć numeru zamiast aliasu typu BSON.
Przykład:
db.employees.find( {
remuneration: { $type: [1, 16, 10] }
} ) Wynik:
{ "_id" : 2, "name" : "Sarah", "remuneration" : 128000 }
{ "_id" : 3, "name" : "Fritz", "remuneration" : 25000 }
{ "_id" : 7, "name" : "Homer", "remuneration" : null }
W tym przypadku podałem tablicę liczb, które odpowiadają double , int i null (co zwraca ten sam wynik, co w poprzednim przykładzie).
Przed MongoDB 3.2 akceptowane były tylko liczby z $type operator zapytania. Aliasy ciągów są akceptowane dopiero od MongoDB 3.2.
Zwróć typ pola
Jest też $type operator potoku agregacji, który pozwala uzyskać typ BSON wartości pola.