Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

$type (operador de predicado de query)

$type

$type selecciona documentos cuyos valores del/la field son una instancia de lo especificado Tipo(s) BSON. Consultar por tipo de dato 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 obtener un ejemplo, consulte Consulta 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.

MinKey y MaxKey se usan en operaciones de comparación y existen principalmente para uso interno. Para todos los posibles valores de elementos BSON, MinKey es siempre el valor más pequeño, y MaxKey es siempre 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 de data tiene estos documentos con MinKey y MaxKey:

db.data.insertMany( [
{ _id: 1, x: MinKey() },
{ _id: 2, y: MaxKey() }
] )

El siguiente query devuelve el documento con _id: 1:

db.data.find( { x: { $type: "minKey" } } )
[
{
_id: 1,
x: MinKey()
}
]

El siguiente query devuelve el documento con _id: 2:

db.data.find( { y: { $type: "maxKey" } } )
[
{
_id: 2,
y: MaxKey()
}
]

Los ejemplos de esta página utilizan datos del conjunto de datos de muestra sample_mflix. Para obtener más información sobre cómo cargar este conjunto de datos en la implementación autogestionada de MongoDB, consultar Cargar el conjunto de datos de muestra. Si se realizó alguna modificación en las bases de datos de muestra, es posible que se deban descartar y volver a crear las bases de datos para ejecutar los ejemplos de esta página.

La colección movies almacena las calificaciones de IMDb en el campo imdb.rating. La mayoría de los documentos almacenan imdb.rating como un double, pero algunos documentos lo almacenan como un string vacío ("").

Las siguientes consultas devuelven documentos de 2013 donde imdb.rating es el tipo BSON. string

Esta consulta especifica el tipo con el número del tipo BSON.

db.movies.find(
{ "imdb.rating": { $type: 2 }, year: 2013 },
{ _id: 0, title: 1, year: 1, "imdb.rating": 1 }
)
[
{ title: 'Coming to Terms', year: 2013, imdb: { rating: '' } },
{ title: 'Absent Minded', year: 2013, imdb: { rating: '' } }
]

Esta consulta especifica el tipo con el alias del tipo BSON:

db.movies.find(
{ "imdb.rating": { $type: "string" }, year: 2013 },
{ _id: 0, title: 1, year: 1, "imdb.rating": 1 }
)
[
{ title: 'Coming to Terms', year: 2013, imdb: { rating: '' } },
{ title: 'Absent Minded', year: 2013, imdb: { rating: '' } }
]

La siguiente consulta utiliza el number alias para devolver documentos donde imdb.rating es el tipo BSON, double int longo:

db.movies.find(
{ "imdb.rating": { $type: "number" }, runtime: { $gt: 1000 } },
{ _id: 0, title: 1, runtime: 1, "imdb.rating": 1 }
)
[
{ runtime: 1256, title: 'Centennial', imdb: { rating: 8.5 } },
{ runtime: 1140, title: 'Baseball', imdb: { rating: 9.1 } }
]

Las siguientes consultas devuelven documentos donde imdb.rating es el tipo BSON string doubleo. La primera consulta utiliza alias numéricos y la segunda utiliza alias de cadena.

db.movies.find(
{ "imdb.rating": { $type: [ 2, 1 ] },
runtime: { $gt: 1000 } },
{ _id: 0, title: 1, runtime: 1, "imdb.rating": 1 }
)
[
{ runtime: 1256, title: 'Centennial', imdb: { rating: 8.5 } },
{ runtime: 1140, title: 'Baseball', imdb: { rating: 9.1 } }
]
db.movies.find(
{ "imdb.rating": { $type: [ "string", "double" ] },
runtime: { $gt: 1000 } },
{ _id: 0, title: 1, runtime: 1, "imdb.rating": 1 }
)
[
{ runtime: 1256, title: 'Centennial', imdb: { rating: 8.5 } },
{ runtime: 1140, title: 'Baseball', imdb: { rating: 9.1 } }
]

La colección movies almacena los géneros de películas en el campo genres como una matriz. La siguiente consulta devuelve documentos donde el campo genres es una matriz:

db.movies.find(
{ genres: { $type: "array" }, runtime: { $gt: 1000 } },
{ _id: 0, title: 1, genres: 1 }
)
[
{
title: 'Centennial',
genres: [ 'Action', 'Adventure', 'Drama' ]
},
{
title: 'Baseball',
genres: [ 'Documentary', 'History', 'Sport' ]
}
]

Los siguientes ejemplos utilizan la colección restaurants que usa minKey para cualquier calificación que sea una calificación reprobatoria:

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 : "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" } }
)
[
{
_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:00.000Z'),
grade: 'C',
score: 15
},
{
date: ISODate('2013-09-11T00:00:00.000Z'),
grade: 'C',
score: 16
},
{
date: ISODate('2013-01-24T00:00:00.000Z'),
grade: MinKey(),
score: 30
},
{
date: ISODate('2011-11-23T00:00:00.000Z'),
grade: 'C',
score: 15
}
],
name: ...,
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" } }
)
[
{
_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:00.000Z'),
grade: MaxKey(),
score: 2
},
{
date: ISODate('2013-09-11T00:00:00.000Z'),
grade: 'B',
score: 6
},
{
date: ISODate('2013-01-24T00:00:00.000Z'),
grade: MaxKey(),
score: 3
},
{
date: ISODate('2011-11-23T00:00:00.000Z'),
grade: 'B',
score: 5
}
],
name: ...,
restaurant_id: '30075449'
}
]

Volver

$exists

En esta página