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:
double32-bit integer64-bit integerdecimal
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.