Definición
Compatibilidad
Puedes usar $convert 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
$convert tiene la siguiente sintaxis:
{ $convert: { input: <expression>, to: <type expression>, onError: <expression>, // Optional. onNull: <expression> // Optional. } }
El $convert procesa un documento con los siguientes campos:
Campo | Descripción | |||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| El argumento puede ser cualquier expresión válida. Para obtener más información sobre las expresiones, consulta Expresiones. | |||||||||||||||||||||||||||
| El argumento puede ser cualquier expresión válida que se resuelva en uno de los siguientes identificadores numéricos o de cadena:
| |||||||||||||||||||||||||||
| Opcional. El valor que se debe devolver al producirse un error durante la conversión, incluidas las conversiones de tipos no admitidas. Los argumentos pueden ser cualquier expresiónválida. Si no se especifica, la operación arroja un error al encontrar un error y se detiene. | |||||||||||||||||||||||||||
|
Además de $convert, MongoDB proporciona los siguientes operadores de agregación como atajo cuando el comportamiento por defecto "onError" y "onNull" es aceptable:
Comportamiento
Conversión a un booleano
La siguiente tabla enumera los tipos de entrada que se pueden convertir a un valor booleano:
Tipo de entrada | Comportamiento |
|---|---|
Arreglo | Devuelve verdadero |
Datos binarios | Devuelve verdadero |
Booleano | Sin-op. Devuelve el valor booleano. |
Código | Devuelve verdadero |
fecha | Devuelve verdadero |
Decimal | Returns true if not zero Return false if zero |
Double | Returns true if not zero Return false if zero |
entero | Returns true if not zero Return false if zero |
JavaScript | Devuelve verdadero |
Long | Returns true if not zero Return false if zero |
Clave máxima | Devuelve verdadero |
MinKey | Devuelve verdadero |
Nulo | Devuelve el valor especificado para la opción |
Objeto | Devuelve verdadero |
ObjectId | Devuelve verdadero |
Expresión regular | Devuelve verdadero |
String | Devuelve verdadero |
Marca de tiempo | Devuelve verdadero |
Para obtener más información sobre los tipos de datos en MongoDB, consulta BSON Types.
La siguiente tabla enumera algunos ejemplos de conversión a valores booleanos:
Ejemplo | Resultados | ||||
|---|---|---|---|---|---|
| true | ||||
| false | ||||
| true | ||||
| true | ||||
| false | ||||
| true | ||||
| true | ||||
| true | ||||
| true | ||||
| true | ||||
| Nulo |
Tip
Conversión a un entero
La siguiente tabla enumera los tipos de entrada que se pueden convertir a un número entero:
Tipo de entrada | Comportamiento |
|---|---|
Booleano | Returns 0 for false.Returns 1 for true. |
Double | Retorna un valor truncado. El valor double truncado debe estar dentro del valor mínimo y máximo para un número entero. No se puede convertir un valor doble cuyo valor truncado sea menor que el valor entero mínimo o mayor que el valor entero máximo. |
Decimal | Retorna un valor truncado. El valor decimal truncado debe encontrarse dentro del valor mínimo y máximo de un entero. No puedes convertir un valor decimal cuyo valor truncado sea menor que el valor entero mínimo o mayor que el valor entero máximo. |
entero | Sin operación. Devuelve el valor entero. |
Long | Devuelve el valor largo como un entero. El valor largo debe estar dentro del valor mínimo y máximo para un entero. No se puede convertir un valor largo que sea menor que el valor entero mínimo o mayor que el valor entero máximo. |
String | Devuelve el valor numérico de la cadena como un entero. El valor de la string debe ser un número entero en base 10 (por ejemplo, No se puede convertir un valor string de un número decimal o de punto flotante, ni tampoco de un número que no sea en base 10 (por ejemplo, |
La siguiente tabla enumera algunos ejemplos de conversión a números enteros:
Ejemplo | Resultados | ||||
|---|---|---|---|---|---|
| 1 | ||||
| 0 | ||||
| 1 | ||||
| 5 | ||||
| Error | ||||
| 5000 | ||||
| Error | ||||
| -2 | ||||
| Error | ||||
| Nulo |
Tip
$toInt operador.
Conversión a decimal
La siguiente tabla enumera los tipos de entrada que se pueden convertir a decimal:
Tipo de entrada | Comportamiento |
|---|---|
Booleano | Returns Decimal128( "0" ) for false.Returns Decimal128( "1" ) for true. |
Double | Devuelve el valor double como un decimal. |
Decimal | Sin-op. Devuelve el decimal. |
entero | Devuelve el valor int como decimal. |
Long | Devuelve el valor largo como decimal. |
String | Devuelve el valor numérico de la string como un número decimal. El valor de la cadena debe ser un valor numérico base 10 (por No puedes convertir un valor de string de un número que no sea de 10 como base (por ejemplo, |
fecha | Devuelve la cantidad de milisegundos desde la Unix epoch que corresponde al valor de la fecha. |
La siguiente tabla enumera algunos ejemplos de conversión a decimales:
Ejemplo | Resultados | ||||
|---|---|---|---|---|---|
| Decimal128("1") | ||||
| Decimal128("0") | ||||
| Decimal128( "2.50000000000000" ) | ||||
| Decimal128("5") | ||||
| Decimal128("10000") | ||||
| Decimal128("-5.5") | ||||
| Decimal128("1522039108044") |
Tip
Conversión a Double
La siguiente tabla enumera los tipos de entrada que se pueden convertir a doble:
Tipo de entrada | Comportamiento |
|---|---|
Booleano | Returns NumberDouble(0) for false.Returns NumberDouble(1) for true. |
Double | Sin operación. Devuelve el double. |
Decimal | Devuelve el valor decimal como un double. El valor decimal debe estar dentro del valor mínimo y máximo para un double. No se puede convertir un valor decimal cuyo valor sea menor que el valor doble mínimo o mayor que el valor doble máximo. |
entero | Devuelve el valor int como un double. |
Long | Devuelve el valor largo como un double. |
String | Retorna el valor numérico de la string como un doble. El valor de cadena debe ser un valor numérico en base 10 (ejemplo, No se puede convertir un valor de cadena de un número que no sea de base 10 (por |
fecha | Devuelve la cantidad de milisegundos desde la Unix epoch que corresponde al valor de la fecha. |
La siguiente tabla enumera algunos ejemplos de conversión a doble:
Ejemplo | Resultados | ||||
|---|---|---|---|---|---|
| 1 | ||||
| 0 | ||||
| 2.5 | ||||
| 5 | ||||
| 10000 | ||||
| -5.5 | ||||
| 50.000.000.000 | ||||
| 1522039108044 |
Tip
Conversión a un Long
La siguiente tabla enumera los tipos de entrada que pueden convertirse a un "long":
Tipo de entrada | Comportamiento |
|---|---|
Booleano | Returns 0 for false.Returns 1 for true. |
Double | Retorna un valor truncado. El valor double truncado debe estar dentro del valor mínimo y máximo para un largo. No se puede convertir un valor double cuyo valor truncado es inferior al valor mínimo de long o superior al valor máximo de long. |
Decimal | Retorna un valor truncado. El valor decimal truncado debe estar dentro del valor mínimo y máximo para un entero largo. No puedes convertir un valor decimal cuyo valor truncado sea inferior al valor mínimo de long o supere el valor máximo de long. |
entero | Devuelve el valor int como un long. |
Long | No opera. Devuelve el valor largo. |
String | Devuelve el valor numérico de la string. El valor de la string debe ser un entero largo decimal 10 (p. ej. No se puede convertir un valor en string de un flotante, decimal o número que no sea base 10 (por ejemplo, |
fecha | Convierte la fecha en el número de milisegundos transcurridos desde la Unix epoch. |
La siguiente tabla enumera algunos ejemplos de conversión a largos:
Ejemplo | Resultados | ||||
|---|---|---|---|---|---|
| Long("1") | ||||
| Largo("0") | ||||
| Largo("2") | ||||
| Prolongado ("5") | ||||
| Error | ||||
| Largo("8") | ||||
| Long("1522039108044") | ||||
| large("-2") | ||||
| Error | ||||
| Nulo |
Tip
Conversión a una fecha
La siguiente tabla enumera los tipos de entrada que se pueden convertir a una fecha:
Tipo de entrada | Comportamiento |
|---|---|
Double | Devuelve una fecha que corresponde a la cantidad de milisegundos representados por el valor doble truncado. Un número positivo corresponde al número de milisegundos desde el 1 de enero de 1970. El número negativo corresponde al número de milisegundos antes del 1 de enero de 1970. |
Decimal | Devuelve una fecha que corresponde a la cantidad de milisegundos representados por el valor decimal truncado. Un número positivo corresponde al número de milisegundos desde el 1 de enero de 1970. El número negativo corresponde al número de milisegundos antes del 1 de enero de 1970. |
Long | Devuelve una fecha que corresponde al número de milisegundos representados por el valor long. Un número positivo corresponde al número de milisegundos desde el 1 de enero de 1970. El número negativo corresponde al número de milisegundos antes del 1 de enero de 1970. |
String | Devuelve una fecha que corresponde a la string de fecha. La string debe ser una string de fecha válida, como:
|
ObjectId | Devuelve una fecha que corresponde a la marca de tiempo del ObjectId. |
Marca de tiempo | Devuelve una fecha que corresponde a la marca de tiempo. |
La siguiente tabla enumera algunos ejemplos de conversión a fecha:
Ejemplo | Resultados | ||||
|---|---|---|---|---|---|
| ISODate("1973-10-20T21:20:00.000Z") | ||||
| ISODate("2009-09-19T14:53:56.000Z") | ||||
| Fecha ISO("2004-11-09T11:33:20.000Z") | ||||
| Fecha ISO("1935-02-22T12:26:40.000Z") | ||||
| ISODate("2018-03-27T04:08:58.000Z") | ||||
| ISODate("2018-03-03T00:00:00.000Z") | ||||
| ISODate("2018-03-20T06:00:06.000Z") | ||||
| Error | ||||
| Fecha ISO("2021-11-23T17:21:58.000Z") |
Tip
$toDateoperador
Convirtiendo a un ObjectId
La siguiente tabla enumera los tipos de entrada que se pueden convertir en un ObjectId:
Tipo de entrada | Comportamiento |
|---|---|
String | Devuelve un ObjectId para la string hexadecimal de 24 caracteres. No puedes convertir un valor de string que no sea una string hexadecimal de longitud 24. |
La siguiente tabla enumera algunos ejemplos de conversión a fecha:
Ejemplo | Resultados | ||||
|---|---|---|---|---|---|
| ObjectId("5ab9cbfa31c2ab715d42129e") | ||||
| Error |
Tip
$toObjectId operador.
Convertir a un String
La siguiente tabla enumera los tipos de entrada que se pueden convertir en una cadena:
Tipo de entrada | Comportamiento |
|---|---|
Booleano | Devuelve el valor booleano como una cadena. |
Double | Devuelve el valor double como una string. |
Decimal | Devuelve el valor decimal como una string. |
entero | Devuelve el valor entero como una string. |
Long | Devuelve el valor largo como una cadena. |
ObjectId | Devuelve el valor de ObjectId como una string hexadecimal. |
String | Sin-op. Devuelve el valor de string. |
fecha | Devuelve la fecha como una string. |
La siguiente tabla enumera algunos ejemplos de conversión a string:
Ejemplo | Resultados | ||||
|---|---|---|---|---|---|
| "true" | ||||
| "FALSO" | ||||
| "2,5" | ||||
| "2" | ||||
| "1000" | ||||
| "5ab9c3da31c2ab715d421285" | ||||
| "2018-03-27T16:58:51.538Z" |
Tip
$toStringoperador
Ejemplo
Cree una colección orders con los siguientes documentos:
db.orders.insertMany( [ { _id: 1, item: "apple", qty: 5, price: 10 }, { _id: 2, item: "pie", qty: 10, price: Decimal128("20.0") }, { _id: 3, item: "ice cream", qty: 2, price: "4.99" }, { _id: 4, item: "almonds" }, { _id: 5, item: "bananas", qty: 5000000000, price: Decimal128("1.25") } ] )
La siguiente operación de agregación en la colección orders convierte el price en decimal:
// Define stage to add convertedPrice and convertedQty fields with // the converted price and qty values. // If price or qty values are missing, the conversion returns a // value of decimal value or int value of 0. // If price or qty values cannot be converted, the conversion returns // a string priceQtyConversionStage = { $addFields: { convertedPrice: { $convert: { input: "$price", to: "decimal", onError: "Error", onNull: Decimal128("0") } }, convertedQty: { $convert: { input: "$qty", to: "int", onError:{ $concat: [ "Could not convert ", { $toString:"$qty" }, " to type integer." ] }, onNull: Int32("0") } }, } }; totalPriceCalculationStage = { $project: { totalPrice: { $switch: { branches: [ { case: { $eq: [ { $type: "$convertedPrice" }, "string" ] }, then: "NaN" }, { case: { $eq: [ { $type: "$convertedQty" }, "string" ] }, then: "NaN" }, ], default: { $multiply: [ "$convertedPrice", "$convertedQty" ] } } } } }; db.orders.aggregate( [ priceQtyConversionStage, totalPriceCalculationStage ])
La operación devuelve los siguientes documentos:
{ _id: 1, totalPrice: Decimal128("50") }, { _id: 2, totalPrice: Decimal128("200.0") }, { _id: 3, totalPrice: Decimal128("9.98") }, { _id: 4, totalPrice: Decimal128("0") }, { _id: 5, totalPrice: 'NaN' }