sql >> Base de Datos >  >> NoSQL >> MongoDB

Operador de consulta MongoDB $type

En MongoDB, puede usar el $type operador de consulta de elemento para filtrar una colección de documentos según el tipo BSON. Devuelve solo aquellos documentos que tienen un tipo BSON particular en un campo específico.

Proporcionas el campo y el tipo BSON, y $type devolverá todos los documentos que coincidan.

Ejemplo

Supongamos que insertamos los siguientes documentos en una colección llamada 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 },
    ])

Cada documento contiene un empleado junto con la remuneración de ese empleado.

Sin embargo, mientras cada documento tiene una remuneration podemos ver que no hay coherencia entre los documentos con respecto al tipo BSON que se usa en este campo.

Podemos usar el $type operador de consulta para devolver solo aquellos documentos para los que la remuneration el campo es de cierto tipo BSON.

Ejemplo:

db.employees.find( { remuneration: { $type: "double" } } )

Resultado:

{ "_id" : 3, "name" : "Fritz", "remuneration" : 25000 }

En este caso, solo un documento tiene un tipo BSON de doble en la remuneration campo.

Veamos cuáles contienen cadenas:

db.employees.find( { remuneration: { $type: "string" } } )

Resultado:

{ "_id" : 1, "name" : "Sandy", "remuneration" : "Too Much!!!" }
{ "_id" : 5, "name" : "Beck", "remuneration" : "10% commission" }
{ "_id" : 6, "name" : "Peter", "remuneration" : "70K" }

El number Alias

Puedes usar el number alias como una forma conveniente de devolver documentos que contienen tipos numéricos.

El alias de número coincide con los siguientes tipos de BSON:

  • double
  • 32-bit integer
  • 64-bit integer
  • decimal

Ejemplo:

db.employees.find( { remuneration: { $type: "number" } } )

Resultado:

{ "_id" : 2, "name" : "Sarah", "remuneration" : 128000 }
{ "_id" : 3, "name" : "Fritz", "remuneration" : 25000 }
{ "_id" : 4, "name" : "Chris", "remuneration" : NumberDecimal("45000.75") }

Buscar varios tipos

Puede comprobar varios tipos proporcionando una matriz de tipos de BSON.

Ejemplo:

db.employees.find( { 
  remuneration: { $type: ["double", "int", "null"] } 
  } )

Resultado:

{ "_id" : 2, "name" : "Sarah", "remuneration" : 128000 }
{ "_id" : 3, "name" : "Fritz", "remuneration" : 25000 }
{ "_id" : 7, "name" : "Homer", "remuneration" : null }

Filtrar por número

Cada tipo de BSON tiene un número y un alias correspondientes (como se describe en la documentación de MongoDB).

Los ejemplos anteriores utilizan el alias. Alternativamente, puede usar el número en lugar del alias de tipo BSON.

Ejemplo:

db.employees.find( { 
  remuneration: { $type: [1, 16, 10] } 
  } )

Resultado:

{ "_id" : 2, "name" : "Sarah", "remuneration" : 128000 }
{ "_id" : 3, "name" : "Fritz", "remuneration" : 25000 }
{ "_id" : 7, "name" : "Homer", "remuneration" : null }

En este caso, proporcioné una serie de números que corresponden a double , int y null (que devuelve el mismo resultado que el ejemplo anterior).

Antes de MongoDB 3.2, solo se aceptaban números con el $type operador de consulta Los alias de cadena solo se aceptan desde MongoDB 3.2.

Devolver el tipo de un campo

También hay un $type operador de tubería de agregación que le permite obtener el tipo BSON del valor de un campo.