Definición
Compatibilidad
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.
Sintaxis
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
$isNumber- comprueba si el argumento es un número.$type (Aggregation)- devuelve el tipo BSON del argumento.
Comportamiento
$type devuelve documentos donde el tipo BSON del field coincide con el tipo BSON pasado a $type.
Arreglos
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.
Tipos disponibles
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.
Tip
MinKey y MaxKey
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() } ]
Ejemplos
Consulta por tipo de dato
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 } } ]
Consultas por múltiples tipos de datos
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 } } ]
Consulta por tipo de arreglo
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' ] } ]
Consulta mediante MinKey y MaxKey
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' } ]