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.