Definición
$typeDevuelve una cadena que especifica el Tipo BSON del argumento.
$typetiene la siguiente sintaxis de expresión de operador:{ $type: <expression> } El argumento puede ser cualquier expresión válida.
Tip
$isNumber- comprueba si el argumento es un número.$type (Query)- filtra campos según el tipo BSON.
Comportamiento
$type
A diferencia del $type operador de consulta, que compara elementos de una matriz según su tipo BSON, el $type operador de agregación no examina los elementos de una matriz. En cambio, al pasar una matriz como argumento, el $type operador de agregación devuelve el tipo del argumento, es"array" decir,.
Si el argumento es un campo que falta en el documento de entrada, devuelve$type la "missing" cadena.
La siguiente tabla muestra la salida para varios tipos comunes de $type expresiones:
Ejemplo | Resultados |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
Nota
En el caso de una matriz literal [ 1, 2, 3 ] como, encierre la expresión entre corchetes para evitar que MongoDB analice [ 1, 2, 3 ] como una lista de tres argumentos1, 2, 3 (). Encapsular la matriz [ 1, 2, 3 ] en una expresión produce el mismo $literal resultado.
Consulta formas de sintaxis de expresiones de operador para obtener más información.
Tipos disponibles
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" |
Si el argumento es un campo que falta en el documento de entrada, devuelve$type la "missing" cadena.
Ejemplo
Este ejemplo utiliza una colección llamada coll con los siguientes documentos:
db.coll.insertMany( [ { _id: 0, a : 8 }, { _id: 1, a : [ 41.63, 88.19 ] }, { _id: 2, a : { a : "apple", b : "banana", c: "carrot" } }, { _id: 3, a : "caribou" }, { _id: 4, a : Long(71) }, { _id: 5, a : null }, { _id: 6 } ] )
La siguiente operación de agregación utiliza el $type operador para mostrar el tipo de campo a para todos los documentos como parte de la $project etapa.
db.coll.aggregate([{ $project: { a : { $type: "$a" } } }])
[ { _id: 0, "a" : "int" }, { _id: 1, "a" : "array" }, { _id: 2, "a" : "object" }, { _id: 3, "a" : "string" }, { _id: 4, "a" : "long" }, { _id: 5, "a" : "null" }, { _id: 6, "a" : "missing" } ]
Comprobación de existencia
Las expresiones no admiten el $exists operador. Para evaluar si un campo existe en una expresión, puede usar el missing tipo.
La siguiente operación de agregación utiliza el tipo missing para añadir un campo a a los documentos de la colección coll anterior que carecen del campo a. Tenga en cuenta que un documento con a: null no es lo mismo que uno con el campo a ausente.
db.coll.aggregate([ { $addFields: { a: { $cond: { if: { $eq: [{ $type: "$a" }, "missing"] }, then: [], else: "$a" } } } } ])
[ { _id: 0, a : 8 }, { _id: 1, a : [ 41.63, 88.19 ] }, { _id: 2, a : { a : "apple", b : "banana", c: "carrot" } }, { _id: 3, a : "caribou" }, { _id: 4, a : Long(71) }, { _id: 5, a : null }, { _id: 6, a : [] } ]