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 más información sobre expresiones, consulte 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 genera un error al encontrar un error y se detiene. | |||||||||||||||||||||||||||
|
Además de, MongoDB proporciona los siguientes operadores de agregación como abreviatura cuando el comportamiento predeterminado "onError" y "onNull" es $convert aceptable:
Comportamiento
Conversión a un valor 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 | No-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 |
MaxKey | 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, consulte Tipos BSON.
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 doble truncado debe estar dentro del valor mínimo y máximo de un 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 estar dentro del valor mínimo y máximo de un número entero. No se puede convertir un valor decimal cuyo valor truncado sea menor que el valor entero mínimo o mayor que el valor entero máximo. |
entero | No-op. 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 cadena debe ser un 10 entero base (por No se puede convertir un valor de cadena de un número flotante, decimal o no base (por 10 |
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 doble como decimal. |
Decimal | No-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 cadena como decimal. El valor de la cadena debe ser un 10 valor numérico base (por No se puede convertir un valor de cadena de un número que 10 |
fecha | Devuelve el número de milisegundos desde la época 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
Convirtiendo a un doble
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 | No-op. Devuelve el doble. |
Decimal | Devuelve el valor decimal como doble. El valor decimal debe estar dentro del valor mínimo y máximo para un doble. 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 doble. |
Long | Devuelve el valor largo como doble. |
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 10 |
fecha | Devuelve el número de milisegundos desde la época 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 | ||||
| 50000000000 | ||||
| 1522039108044 |
Tip
Conversión a largo
La siguiente tabla enumera los tipos de entrada que se pueden convertir a largo:
Tipo de entrada | Comportamiento |
|---|---|
Booleano | Returns 0 for false.Returns 1 for true. |
Double | Retorna un valor truncado. El valor doble truncado debe estar dentro del valor mínimo y máximo para un valor largo. No se puede convertir un valor doble cuyo valor truncado sea menor que el valor largo mínimo o mayor que el valor largo máximo. |
Decimal | Retorna un valor truncado. El valor decimal truncado debe estar dentro del valor mínimo y máximo durante un largo. No se puede convertir un valor decimal cuyo valor truncado sea menor que el valor largo mínimo o mayor que el valor largo máximo. |
entero | Devuelve el valor int como un largo. |
Long | No opera. Devuelve el valor largo. |
String | Devuelve el valor numérico de la cadena. El valor de la cadena debe tener una longitud base 10 (por No se puede convertir un valor de cadena de un número flotante, decimal o no base (por 10 |
fecha | Convierte la fecha en número de milisegundos desde la época. |
La siguiente tabla enumera algunos ejemplos de conversión a largos:
Ejemplo | Resultados | ||||
|---|---|---|---|---|---|
| Largo("1") | ||||
| Largo("0") | ||||
| Largo("2") | ||||
| Largo("5") | ||||
| Error | ||||
| Largo("8") | ||||
| Long("1522039108044") | ||||
| Largo("-2") | ||||
| Error | ||||
| nulo |
Tip
Convertir 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. El 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 de enero 1, 1970. |
Decimal | Devuelve una fecha que corresponde a la cantidad de milisegundos representados por el valor decimal truncado. El 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 de enero 1, 1970. |
Long | Devuelve una fecha que corresponde a la cantidad de milisegundos representados por el valor largo. El 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 de enero 1, 1970. |
String | Devuelve una fecha que corresponde a la string de fecha. La cadena debe ser una cadena de fecha válida, como por ejemplo:
|
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 | ||||
|---|---|---|---|---|---|
| FechaISO("1973-10-20T21:20:00.000Z") | ||||
| FechaISO("2009-09-19T14:53:56.000Z") | ||||
| FechaISO("2004-11-09T11:33:20.000Z") | ||||
| FechaISO("1935-02-22T12:26:40.000Z") | ||||
| FechaISO("2018-03-27T04:08:58.000Z") | ||||
| ISODate("2018-03-03T00:00:00.000Z") | ||||
| FechaISO("2018-03-20T06:00:06.000Z") | ||||
| Error | ||||
| FechaISO("2021-11-23T17:21:58.000Z") |
Tip
$toDateoperador
Conversión a un ObjectId
La siguiente tabla enumera los tipos de entrada que se pueden convertir a un ObjectId:
Tipo de entrada | Comportamiento |
|---|---|
String | Devuelve un ObjectId para la string hexadecimal de 24 caracteres. No se puede convertir un valor de cadena que no sea una cadena 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 doble como una cadena. |
Decimal | Devuelve el valor decimal como una cadena. |
entero | Devuelve el valor entero como una cadena. |
Long | Devuelve el valor largo como una cadena. |
ObjectId | Devuelve el valor de ObjectId como una cadena hexadecimal. |
String | No-op. Devuelve el valor de la cadena. |
fecha | Devuelve la fecha como una cadena. |
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' }