sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB $type Query Operator

I MongoDB kan du bruge $type elementforespørgselsoperator til at filtrere en samling dokumenter baseret på BSON-type. Det returnerer kun de dokumenter, der har en bestemt BSON-type i et specifikt felt.

Du angiver feltet og BSON-typen og $type vil returnere alle dokumenter, der matcher.

Eksempel

Antag, at vi indsætter følgende dokumenter i en samling kaldet 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 },
    ])

Hvert dokument indeholder en medarbejder sammen med den pågældende medarbejders vederlag.

Men mens hvert dokument har et remuneration felt, kan vi se, at der ikke er nogen sammenhæng på tværs af dokumenterne med hensyn til den BSON-type, der bruges i dette felt.

Vi kan bruge $type forespørgselsoperatør for at returnere kun de dokumenter, som remuneration for feltet er af en bestemt BSON-type.

Eksempel:

db.employees.find( { remuneration: { $type: "double" } } )

Resultat:

{ "_id" : 3, "name" : "Fritz", "remuneration" : 25000 }

I dette tilfælde har kun ét dokument en BSON-type dobbelt i remuneration felt.

Lad os se, hvilke der indeholder strenge:

db.employees.find( { remuneration: { $type: "string" } } )

Resultat:

{ "_id" : 1, "name" : "Sandy", "remuneration" : "Too Much!!!" }
{ "_id" : 5, "name" : "Beck", "remuneration" : "10% commission" }
{ "_id" : 6, "name" : "Peter", "remuneration" : "70K" }

number Alias

Du kan bruge number alias som en bekvem måde at returnere dokumenter, der indeholder numeriske typer.

Nummeraliaset stemmer overens med følgende BSON-typer:

  • double
  • 32-bit integer
  • 64-bit integer
  • decimal

Eksempel:

db.employees.find( { remuneration: { $type: "number" } } )

Resultat:

{ "_id" : 2, "name" : "Sarah", "remuneration" : 128000 }
{ "_id" : 3, "name" : "Fritz", "remuneration" : 25000 }
{ "_id" : 4, "name" : "Chris", "remuneration" : NumberDecimal("45000.75") }

Se efter flere typer

Du kan tjekke for flere typer ved at levere en række BSON-typer.

Eksempel:

db.employees.find( { 
  remuneration: { $type: ["double", "int", "null"] } 
  } )

Resultat:

{ "_id" : 2, "name" : "Sarah", "remuneration" : 128000 }
{ "_id" : 3, "name" : "Fritz", "remuneration" : 25000 }
{ "_id" : 7, "name" : "Homer", "remuneration" : null }

Filtrer efter nummer

Hver BSON-type har et tilsvarende nummer og alias (som beskrevet i MongoDB-dokumentationen).

De foregående eksempler bruger aliaset. Du kan alternativt bruge nummeret i stedet for BSON type alias.

Eksempel:

db.employees.find( { 
  remuneration: { $type: [1, 16, 10] } 
  } )

Resultat:

{ "_id" : 2, "name" : "Sarah", "remuneration" : 128000 }
{ "_id" : 3, "name" : "Fritz", "remuneration" : 25000 }
{ "_id" : 7, "name" : "Homer", "remuneration" : null }

I dette tilfælde har jeg givet en række tal, der svarer til double , int , og null (hvilket giver det samme resultat som det forrige eksempel).

Før MongoDB 3.2 blev kun tal accepteret med $type forespørgselsoperatør. Strengaliasser er kun blevet accepteret siden MongoDB 3.2.

Returnér et felts type

Der er også en $type aggregeringspipeline-operatør, der giver dig mulighed for at få BSON-typen for et felts værdi.


  1. Kan MongoDB bruge et indeks, når man tjekker for eksistensen af ​​et felt med $exists-operatoren?

  2. MongoDB $konverter

  3. Del sessioner mellem php og node

  4. Gruppetæller med MongoDB ved hjælp af aggregeringsramme