sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB $type Query Operator

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 Alias

Můž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.


  1. Jak zruším databázi MongoDB z příkazového řádku?

  2. Jak mohu zadat dotaz na odlišné hodnoty v Mongoose?

  3. MongoDB:Jedinečný klíč ve vloženém dokumentu

  4. Případy použití pro skóre Redis a funkce hodnocení pro sady