Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

$type (operador de predicado de consulta)

$type

$type selecciona documentos cuyos valores del/la field son una instancia de lo especificado Tipo(s)BSON. La consulta por tipo de datos es útil para datos no estructurados 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.

Para ver un ejemplo, consulte Consultas por múltiples tipos de datos.

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.

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

Para ejemplos, consulte Ejemplos.

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

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

Por ejemplo, la siguiente colección data tiene estos 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, mientras que el zipCode tiene los valores 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"] }
] )

Las siguientes consultas devuelven documentos donde zipCode es el tipo BSON string o es una matriz con un elemento del tipo especificado:

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

Las consultas devuelven:

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

Las siguientes consultas devuelven documentos donde zipCode es el tipo BSON double o es una matriz con 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 }

La siguiente consulta utiliza el number alias para devolver documentos donde zipCode es el tipo BSON, double into long o es una matriz con un elemento del tipo especificado:

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") }
] )

Las siguientes consultas devuelven documentos donde classAverage es el tipo BSON string o double o es una matriz con un elemento del tipo especificado. La primera consulta utiliza alias numéricos y la segunda utiliza alias de cadena.

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

Estos queries devuelven:

{ _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 }
] )

La siguiente consulta devuelve cualquier documento donde el campo readings sea una matriz:

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

La query 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