Definici贸n
$typeDevuelve una string que especifica el Tipo BSON del argumento.
$typetiene la siguiente sintaxis de expresi贸n de operador:{ $type: <expression> } El argumento puede ser cualquier expresi贸nv谩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 operador del query $type, que empareja los elementos de la arreglo en funci贸n de su tipo BSON, el operador de agregaci贸n $type no examina los elementos de la arreglo. En cambio, cuando se pasa un arreglo como argumento, el operador de agregaci贸n $type devuelve el tipo del argumento, es decir, "array".
Si el argumento es un campo que falta en el documento de entrada, $type devuelve la cadena "missing".
La siguiente tabla muestra la $type salida para varios tipos comunes de expresiones:
Ejemplo | Resultados |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
Nota
En el caso de un arreglo literal como [ 1, 2, 3 ], encierre la expresi贸n en un conjunto externo de corchetes de arreglo para evitar que MongoDB interprete [ 1, 2, 3 ] como una lista de argumentos con tres argumentos (1, 2, 3). Envolver el arreglo [ 1, 2, 3 ] en una expresi贸n $literal logra el mismo 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 | "javascriptWithScope" | Obsoleto. |
entero de 32 bits | 16 | "int" | |
Marca de tiempo | 17 | "timestamp" | |
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, $type devuelve la cadena "missing".
Ejemplo
Este ejemplo usa 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 operador $type para mostrar el tipo de campo a de todos los documentos como parte de la etapa $project.
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
Expresiones no admite el operador $exists. Para evaluar si un campo existe o no en una expresi贸n, puede utilizar el tipo missing.
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 (mencionada anteriormente) que carecen del campo a. Observa que un documento donde a: null no es igual a un documento donde falta el campo a.
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 : [] } ]