Docs Menu
Docs Home
/ /
Consulta de elementos

$type

$type

$type selecciona documentos donde el valor de field es una instancia del especificado Tipo(s) deBSON. Consultar por tipo de dato es útil cuando se trabaja con datos muy desestructurados, donde los tipos de datos no son predecibles.

Puedes usar $type para implementaciones alojadas en los siguientes entornos:

  • MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube

  • MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB

  • MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.

Una expresión$type para un único tipo BSON tiene la siguiente sintaxis:

{ field: { $type: <BSON type> } }

Puedes especificar el número o alias para el tipo BSON.

La expresión $type también puede aceptar un arreglo de tipos BSON y tiene la siguiente sintaxis:

{ field: { $type: [ <BSON type1> , <BSON type2>, ... ] } }

El query anterior coincide con documentos donde el valor field es cualquiera de los tipos indicados. Los tipos especificados en el arreglo pueden ser alias numéricos o de string.

Ve Consulta por múltiples tipos de datos para obtener un ejemplo.

Tipos Disponibles describe los BSON types y sus correspondientes alias numéricos y de string.

Tip

$type devuelve documentos donde el tipo BSON del field coincide con el tipo BSON pasado a $type.

Para documentos donde field es un arreglo, $type devuelve documentos en los que al menos un elemento del arreglo coincide con un tipo pasado a $type.

Los queries para $type: "array" devuelven documentos donde el campo en sí es un arreglo.

El $type Operador acepta alias de string para los BSON types además de los números correspondientes a los BSON types. [1]

Tipo
Número
Alias
notas

Double

1

"double"

String

2

"string"

Objeto

3

"objeto"

Arreglo

4

"arreglo"

Datos binarios

5

"binData"

Indefinido

6

"indefinido"

Obsoleto.

ObjectId

7

"objectId"

Booleano

8

"bool"

fecha

9

"date"

Nulo

10

"null"

Expresión regular

11

"regex"

DBPointer

12

"dbPointer"

Obsoleto.

JavaScript

13

"javascript"

Símbolo

14

"symbol"

Obsoleto.

JavaScript con ámbito

15

"javascriptConÁmbito"

Obsoleto.

entero de 32 bits

16

"int"

Marca de tiempo

17

"marca de tiempo"

entero de 64 bits

18

"long"

Decimal128

19

"Decimal"

Min key

-1

"minKey"

Clave máxima

127

"maxKey"

$type proporciona soporte al alias number, que coincide con los siguientes tipos BSON:

Para ejemplos, consulte Ejemplos.

[1] Los usuarios ya no pueden utilizar el filtro de query $type: 0 como sinónimo de $exists:false. Para realizar las query en campos nulos o faltantes, consulta Query de campos nulos o faltantes.

MinKey y MaxKey se utilizan en operaciones de comparación y existen principalmente para uso interno. Para todos los valores posibles de elementos BSON, MinKey siempre es el valor más pequeño, mientras que MaxKey siempre es el valor más alto.

La consulta de minKey o maxKey con $type solo devuelve los campos que coinciden con los valores especiales MinKey o MaxKey.

Supón que la colección data tiene dos documentos con MinKey y MaxKey:

db.data.insertMany( [
{ _id : 1, x : { "$minKey" : 1 } },
{ _id : 2, y : { "$maxKey" : 1 } }
] )

El siguiente query devuelve el documento con _id: 1:

db.data.find( { x: { $type: "minKey" } } )

El siguiente query devuelve el documento con _id: 2:

db.data.find( { y: { $type: "maxKey" } } )

El addressBook contiene direcciones y códigos postales, donde zipCode tiene valores de string, int, double y long:

db.addressBook.insertMany( [
{ _id : 1, address : "2030 Martian Way", zipCode : "90698345" },
{ _id : 2, address : "156 Lunar Place", zipCode : 43339374 },
{ _id : 3, address : "2324 Pluto Place", zipCode : Long(3921412) },
{ _id : 4, address : "55 Saturn Ring" , zipCode : Int32(88602117) },
{ _id : 5, address : "104 Venus Drive", zipCode : ["834847278", "1893289032"] }
] )

Los siguientes queries devuelven todos los documentos donde zipCode es del tipo BSON string o es un arreglo que contiene un elemento del tipo especificado:

db.addressBook.find( { zipCode : { $type : 2 } } );
db.addressBook.find( { zipCode : { $type : "string" } } );

Estos queries devuelven:

{ _id : 1, address : "2030 Martian Way", zipCode : "90698345" }
{ _id : 5, address : "104 Venus Drive", zipCode : [ "834847278", "1893289032" ] }

Los siguientes queries devuelven todos los documentos donde zipCode es del tipo BSON double o es un arreglo que contiene un elemento del tipo especificado:

db.addressBook.find( { zipCode : { $type : 1 } } );
db.addressBook.find( { zipCode : { $type : "double" } } );

Estos queries devuelven:

{ _id : 2, address : "156 Lunar Place", zipCode : 43339374 }

El siguiente query utiliza el alias number para devolver documentos donde zipCode es del tipo BSON double, int, o long o es un arreglo que contiene un elemento de los tipos especificados:

db.addressBook.find( { zipCode : { $type : "number" } } )

Estos queries devuelven:

{ _id : 2, address : "156 Lunar Place", zipCode : 43339374 }
{ _id : 3, address : "2324 Pluto Place", zipCode : Long(3921412) }
{ _id : 4, address : "55 Saturn Ring", zipCode : 88602117 }

La colección grades contiene nombres y promedios, donde classAverage tiene valores string, int y double:

db.grades.insertMany( [
{ _id : 1, name : "Alice King" , classAverage : 87.333333333333333 },
{ _id : 2, name : "Bob Jenkins", classAverage : "83.52" },
{ _id : 3, name : "Cathy Hart", classAverage: "94.06" },
{ _id : 4, name : "Drew Williams" , classAverage : Int32("93") }
] )

Los siguientes queries devuelven todos los documentos donde classAverage es del tipo BSON string o double o es un arreglo que contiene un elemento de los tipos especificados. El primer query usa alias numéricos, mientras que el segundo query usa alias de strings.

db.grades.find( { classAverage : { $type : [ 2 , 1 ] } } );
db.grades.find( { classAverage : { $type : [ "string" , "double" ] } } );

Estos queries devuelven los siguientes documentos:

{ _id : 1, name : "Alice King", classAverage : 87.33333333333333 }
{ _id : 2, name : "Bob Jenkins", classAverage : "83.52" }
{ _id : 3, name : "Cathy Hart", classAverage : "94.06" }

La colección restaurants utiliza minKey para cualquier calificación fallida:

db.restaurants.insertOne( [
{
_id: 1,
address: {
building: "230",
coord: [ -73.996089, 40.675018 ],
street: "Huntington St",
zipcode: "11231"
},
borough: "Brooklyn",
cuisine: "Bakery",
grades: [
{ date : new Date(1393804800000), grade : "C", score : 15 },
{ date : new Date(1378857600000), grade : "C", score : 16 },
{ date : new Date(1358985600000), grade : MinKey(), score : 30 },
{ date : new Date(1322006400000), grade : "C", score : 15 }
],
name : "Dirty Dan's Donuts",
restaurant_id : "30075445"
}
] )

Y maxKey para cualquier calificación que sea la nota máxima de aprobación:

db.restaurants.insertOne( [
{
_id : 2,
address : {
building : "1166",
coord : [ -73.955184, 40.738589 ],
street : "Manhattan Ave",
zipcode : "11222"
},
borough: "Brooklyn",
cuisine: "Bakery",
grades: [
{ date : new Date(1393804800000), grade : MaxKey(), score : 2 },
{ date : new Date(1378857600000), grade : "B", score : 6 },
{ date : new Date(1358985600000), grade : MaxKey(), score : 3 },
{ date : new Date(1322006400000), grade : "B", score : 5 }
],
name : "Dainty Daisey's Donuts",
restaurant_id : "30075449"
}
] )

El siguiente query devuelve cualquier restaurante cuyo campo grades.grade contiene minKey o es un arreglo que contiene un elemento del tipo especificado:

db.restaurants.find(
{ "grades.grade" : { $type : "minKey" } }
)

Esto devuelve los siguientes resultados:

{
_id : 1,
address : {
building : "230",
coord : [ -73.996089, 40.675018 ],
street : "Huntington St",
zipcode : "11231"
},
borough : "Brooklyn",
cuisine : "Bakery",
grades : [
{ date : ISODate("2014-03-03T00:00:00Z"), grade : "C", score : 15 },
{ date : ISODate("2013-09-11T00:00:00Z"), grade : "C", score : 16 },
{ date : ISODate("2013-01-24T00:00:00Z"), grade : { "$minKey" : 1 }, score : 30 },
{ date : ISODate("2011-11-23T00:00:00Z"), grade : "C", score : 15 }
],
name : "Dirty Dan's Donuts",
restaurant_id : "30075445"
}

El siguiente query devuelve cualquier restaurante cuyo campo grades.grade contiene maxKey o es un arreglo que contiene un elemento del tipo especificado:

db.restaurants.find(
{ "grades.grade" : { $type : "maxKey" } }
)

Esto devuelve los siguientes resultados:

{
_id : 2,
address : {
building : "1166",
coord : [ -73.955184, 40.738589 ],
street : "Manhattan Ave",
zipcode : "11222"
},
borough : "Brooklyn",
cuisine : "Bakery",
grades : [
{ date : ISODate("2014-03-03T00:00:00Z"), grade : { "$maxKey" : 1 }, score : 2 },
{ date : ISODate("2013-09-11T00:00:00Z"), grade : "B", score : 6 },
{ date : ISODate("2013-01-24T00:00:00Z"), grade : { "$maxKey" : 1 }, score : 3 },
{ date : ISODate("2011-11-23T00:00:00Z"), grade : "B", score : 5 }
],
name : "Dainty Daisey's Donuts",
restaurant_id : "30075449"
}

Una colección llamada sensorReading contiene los siguientes documentos:

db.sensorReading.insertMany( [
{ _id : 1, readings : [ 25, 23, [ "Warn: High Temp!", 55 ], [ "ERROR: SYSTEM SHUTDOWN!", 66 ] ] },
{ _id : 2, readings : [ 25, 25, 24, 23 ] },
{ _id : 3, readings : [ 22, 24, [] ] },
{ _id : 4, readings : [] },
{ _id : 5, readings : 24 }
] )

El siguiente query devuelve cualquier documento en el que el campo readings sea un arreglo, ya sea vacío o no.

db.SensorReading.find( { readings : { $type: "array" } } )

El query anterior devuelve los siguientes documentos:

{
_id : 1,
readings : [
25,
23,
[ "Warn: High Temp!", 55 ],
[ "ERROR: SYSTEM SHUTDOWN!", 66 ]
]
},
{
_id : 2,
readings : [ 25, 25, 24, 23 ]
},
{
_id : 3,
readings : [ 22, 24, [] ]
},
{
_id : 4,
readings : []
}

En los documentos con _id : 1, _id : 2, _id : 3, y _id : 4, el campo readings es un arreglo.

Volver

$exists

En esta página