In MongoDB, puoi usare il $type operatore di query dell'elemento per filtrare una raccolta di documenti in base al tipo BSON. Restituisce solo quei documenti che hanno un particolare tipo BSON in un campo specifico.
Fornisci il campo e il tipo BSON e $type restituirà tutti i documenti corrispondenti.
Esempio
Supponiamo di inserire i seguenti documenti in una raccolta denominata 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 },
]) Ogni documento contiene un dipendente insieme alla sua retribuzione.
Tuttavia, mentre ogni documento ha una remuneration campo, possiamo vedere che non c'è coerenza tra i documenti per quanto riguarda il tipo BSON utilizzato in questo campo.
Possiamo usare il $type operatore di query per restituire solo quei documenti per i quali la remuneration il campo è di un certo tipo BSON.
Esempio:
db.employees.find( { remuneration: { $type: "double" } } ) Risultato:
{ "_id" : 3, "name" : "Fritz", "remuneration" : 25000 }
In questo caso, solo un documento ha un tipo BSON di double nella remuneration campo.
Vediamo quali contengono stringhe:
db.employees.find( { remuneration: { $type: "string" } } ) Risultato:
{ "_id" : 1, "name" : "Sandy", "remuneration" : "Too Much!!!" }
{ "_id" : 5, "name" : "Beck", "remuneration" : "10% commission" }
{ "_id" : 6, "name" : "Peter", "remuneration" : "70K" } Il number alias
Puoi usare il number alias come un modo conveniente per restituire documenti che contengono tipi numerici.
L'alias del numero corrisponde ai seguenti tipi BSON:
double32-bit integer64-bit integerdecimal
Esempio:
db.employees.find( { remuneration: { $type: "number" } } ) Risultato:
{ "_id" : 2, "name" : "Sarah", "remuneration" : 128000 }
{ "_id" : 3, "name" : "Fritz", "remuneration" : 25000 }
{ "_id" : 4, "name" : "Chris", "remuneration" : NumberDecimal("45000.75") } Controlla più tipi
Puoi verificare la presenza di più tipi fornendo una matrice di tipi BSON.
Esempio:
db.employees.find( {
remuneration: { $type: ["double", "int", "null"] }
} ) Risultato:
{ "_id" : 2, "name" : "Sarah", "remuneration" : 128000 }
{ "_id" : 3, "name" : "Fritz", "remuneration" : 25000 }
{ "_id" : 7, "name" : "Homer", "remuneration" : null } Filtra per numero
Ogni tipo BSON ha un numero e un alias corrispondenti (come descritto nella documentazione di MongoDB).
Gli esempi precedenti usano l'alias. In alternativa puoi utilizzare il numero invece dell'alias di tipo BSON.
Esempio:
db.employees.find( {
remuneration: { $type: [1, 16, 10] }
} ) Risultato:
{ "_id" : 2, "name" : "Sarah", "remuneration" : 128000 }
{ "_id" : 3, "name" : "Fritz", "remuneration" : 25000 }
{ "_id" : 7, "name" : "Homer", "remuneration" : null }
In questo caso, ho fornito una matrice di numeri che corrispondono a double , int e null (che restituisce lo stesso risultato dell'esempio precedente).
Prima di MongoDB 3.2, solo i numeri erano accettati con il $type operatore di interrogazione. Gli alias di stringa sono stati accettati solo da MongoDB 3.2.
Restituisci il tipo di campo
C'è anche un $type operatore della pipeline di aggregazione che consente di ottenere il tipo BSON del valore di un campo.