V MongoDB můžete použít $type
operátor dotazu na element pro filtrování kolekce dokumentů na základě typu BSON. Vrací pouze ty dokumenty, které mají konkrétní typ BSON v konkrétním poli.
Zadáte pole a typ BSON a $type
vrátí všechny odpovídající dokumenty.
Příklad
Předpokládejme, že vložíme následující dokumenty do kolekce nazvané 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ždý dokument obsahuje zaměstnance spolu s odměnou tohoto zaměstnance.
Nicméně, zatímco každý dokument má remuneration
můžeme vidět, že mezi dokumenty neexistuje žádná konzistence s ohledem na typ BSON používaný v tomto poli.
Můžeme použít $type
dotazovací operátor vrátit pouze ty dokumenty, za které remuneration
pole je určitého typu BSON.
Příklad:
db.employees.find( { remuneration: { $type: "double" } } )
Výsledek:
{ "_id" :3, "name" :"Fritz", "remuneration" :25000 }
V tomto případě má pouze jeden dokument typ BSON double v remuneration
pole.
Podívejme se, které z nich obsahují řetězce:
db.employees.find( { remuneration: { $type: "string" } } )
Výsledek:
{ "_id" :1, "name" :"Sandy", "remuneration" :"Příliš mnoho!!!" }{ "_id" :5, "name" :"Beck", "remuneration" :"10% provize" }{ "_id" :6, "name" :"Peter", "remuneration" :"70K" }
number
AliasMůžete použít
number
alias jako pohodlný způsob vrácení dokumentů obsahujících číselné typy.Alias čísla se shoduje s následujícími typy BSON:
double
32-bit integer
64-bit integer
decimal
Příklad:
db.employees.find( { remuneration: { $type: "number" } } )
Výsledek:
{ "_id" :2, "name" :"Sarah", "remuneration" :128000 }{ "_id" :3, "name" :"Fritz", "remuneration" :25000 }{ "_id" :4, "name" :"Chris", "remuneration" :NumberDecimal("45000.75") }
Zkontrolujte více typů
Můžete zkontrolovat více typů poskytnutím pole typů BSON.
Příklad:
db.employees.find( {
remuneration: { $type: ["double", "int", "null"] }
} )
Výsledek:
{ "_id" :2, "name" :"Sarah", "remuneration" :128000 }{ "_id" :3, "name" :"Fritz", "remuneration" :25000 }{ "_id" :7, "jméno" :"Homer", "odměna" :null }
Filtrovat podle čísla
Každý typ BSON má odpovídající číslo a alias (jak je uvedeno v dokumentaci MongoDB).
Předchozí příklady používají alias. Alternativně můžete místo aliasu typu BSON použít číslo.
Příklad:
db.employees.find( {
remuneration: { $type: [1, 16, 10] }
} )
Výsledek:
{ "_id" :2, "name" :"Sarah", "remuneration" :128000 }{ "_id" :3, "name" :"Fritz", "remuneration" :25000 }{ "_id" :7, "jméno" :"Homer", "odměna" :null }
V tomto případě jsem poskytl pole čísel, která odpovídají double
, int
a null
(což vrátí stejný výsledek jako předchozí příklad).
Před MongoDB 3.2 byla akceptována pouze čísla s $type
operátor dotazu. Řetězcové aliasy jsou přijímány pouze od MongoDB 3.2.
Vrátí typ pole
Existuje také $type
operátor agregačního kanálu, který vám umožňuje získat typ BSON hodnoty pole.