MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Opérateur de requête MongoDB $type

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 Alias

Vous 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.