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.