Dans MongoDB, vous pouvez utiliser le $type
Opérateur de requête d'élément pour filtrer une collection de documents en fonction du type BSON. Il renvoie uniquement les documents qui ont un type BSON particulier dans un champ spécifique.
Vous fournissez le champ et le type BSON, et $type
renverra tous les documents qui correspondent.
Exemple
Supposons que nous insérions les documents suivants dans une collection appelée 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 },
])
Chaque document contient un employé ainsi que sa rémunération.
Cependant, si chaque document a une remuneration
champ, nous pouvons voir qu'il n'y a pas de cohérence entre les documents en ce qui concerne le type BSON utilisé dans ce champ.
Nous pouvons utiliser le $type
opérateur de requête pour renvoyer uniquement les documents pour lesquels la remuneration
le champ est d'un certain type BSON.
Exemple :
db.employees.find( { remuneration: { $type: "double" } } )
Résultat :
{ "_id" :3, "name" :"Fritz", "remuneration" :25000 }
Dans ce cas, un seul document a un type BSON de double dans la remuneration
champ.
Voyons lesquels contiennent des chaînes :
db.employees.find( { remuneration: { $type: "string" } } )
Résultat :
{ "_id" :1, "name" :"Sandy", "remuneration" :"Trop !!!" }{ "_id" :5, "name" :"Beck", "remuneration" :"10% commission" }{ "_id" :6, "name" :"Peter", "remuneration" :"70K" }Le
number
AliasVous pouvez utiliser le
number
alias comme moyen pratique de renvoyer des documents contenant des types numériques.L'alias de numéro correspond aux types de BSON suivants :
double
32-bit integer
64-bit integer
decimal
Exemple :
db.employees.find( { remuneration: { $type: "number" } } )
Résultat :
{ "_id" :2, "name" :"Sarah", "remuneration" :128000 }{ "_id" :3, "name" :"Fritz", "remuneration" :25000 }{ "_id" :4, "name" :"Chris", "remuneration" :NumberDecimal("45000.75") }
Vérifier plusieurs types
Vous pouvez rechercher plusieurs types en fournissant un tableau de types BSON.
Exemple :
db.employees.find( {
remuneration: { $type: ["double", "int", "null"] }
} )
Résultat :
{ "_id" :2, "name" :"Sarah", "remuneration" :128000 }{ "_id" :3, "name" :"Fritz", "remuneration" :25000 }{ "_id" :7, "name" :"Homer", "remuneration" :null }
Filtrer par numéro
Chaque type de BSON a un numéro et un alias correspondant (comme indiqué dans la documentation MongoDB).
Les exemples précédents utilisent l'alias. Vous pouvez également utiliser le numéro au lieu de l'alias de type BSON.
Exemple :
db.employees.find( {
remuneration: { $type: [1, 16, 10] }
} )
Résultat :
{ "_id" :2, "name" :"Sarah", "remuneration" :128000 }{ "_id" :3, "name" :"Fritz", "remuneration" :25000 }{ "_id" :7, "name" :"Homer", "remuneration" :null }
Dans ce cas, j'ai fourni un tableau de nombres qui correspondent à double
, int
, et null
(qui renvoie le même résultat que l'exemple précédent).
Avant MongoDB 3.2, seuls les nombres étaient acceptés avec le $type
opérateur de requête. Les alias de chaîne ne sont acceptés que depuis MongoDB 3.2.
Renvoyer le type d'un champ
Il y a aussi un $type
Opérateur de pipeline d'agrégation qui vous permet d'obtenir le type BSON de la valeur d'un champ.