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
Cambiado en la versión 8.3.
{ $convert: { input: <expression>, to: <type expression> || { type: <type expression>, subtype: <int> }, base: <expression>, // new in 8.3 format: <string>, onError: <expression>, onNull: <expression> } }
$convert toma un documento con los siguientes campos:
Campo | Necesidad | Descripción | ||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Requerido | El argumento puede ser cualquier expresión válida. Para obtener más información sobre las expresiones, consulta Expresiones. A partir de MongoDB 8.1, puedes configurar el campo
A partir de MongoDB 8.3, también puedes establecer el campo MongoDB también admite estos tipos numéricos como entrada al convertir un valor a | ||||||||||||||||||||||||||||||||||||
| Requerido | Especificar el tipo al que se va a convertir la expresión
| ||||||||||||||||||||||||||||||||||||
| Obligatorio si se especifica | El argumento puede ser cualquier expresión válida que se resuelva en uno de los siguientes identificadores numéricos o de string:
| ||||||||||||||||||||||||||||||||||||
| Opcional | Si
Por defecto: 0 (Subtipo binario genérico) | ||||||||||||||||||||||||||||||||||||
| Opcional | Especifica el orden en bytes little-endian o big-endian para las conversiones entre los tipos | ||||||||||||||||||||||||||||||||||||
| Opcional | Base entera para conversiones entre tipos de string y numéricos.
Nuevo en la versión 8.3. | ||||||||||||||||||||||||||||||||||||
| Requerido al convertir de | Especifica el formato de las conversiones entre
Si | ||||||||||||||||||||||||||||||||||||
| Opcional | Valor que se devuelve al encontrar un error durante la conversión, incluyendo conversiones de tipos no soportados. Los argumentos pueden ser cualquier expresión válida. Si no se especifica, la operación arroja un error al encontrar un error y se detiene. | ||||||||||||||||||||||||||||||||||||
| Opcional | Valor que se debe devolver si el Si no se especifica, |
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
Las siguientes secciones describen cómo convertir valores a diferentes tipos.
Convertir a BinData
A partir de MongoDB 8.1, puedes configurar el campo to como binData si configuras el campo input como uno de los siguientes tipos:
intlongdouble
A partir de MongoDB 8.1, $convert devuelve un error al intentar convertir entre diferentes subtipos de binData. En MongoDB 8.0, $convert devuelve el valor original y el subtipo original: no se realiza ninguna conversión. Las versiones de MongoDB anteriores a la 8.0 no realizan conversión de binData.
Convertir de tipos numéricos a binData:
Al convertir un tipo numérico a binData:
Un
intse convierte en unbinDatade 4bytes.Un
longse convierte en un 8-bytebinData.Un
doublese convierte en un 8-bytebinData.
El byteOrder de la salida numérica por defecto es "little" o la colocación del byte menos significativo primero. Por el contrario, "big" coloca el byte más significativo en primer lugar.
Convertir long a binData:
Entrada:
db.t.insertOne( { a: Long(42) } )
db.t.aggregate([ { $project: { _id: 0, convertedBD: { $convert: { input: "$a", to: "binData", } }, } } ])
Resultado:
[ { convertedBD: Binary.createFromBase64('KgAAAAAAAAA=', 0) } ]
Convierte long a binData con ordenación de bytes big-endian:
Entrada:
db.t.insertOne( { a: Long(42) } )
db.t.aggregate([ { $project: { _id: 0, convertedBD: { $convert: { input: "$a", to: "binData", byteOrder: "big", } }, } } ])
Resultado:
[ { convertedBD: Binary.createFromBase64('AAAAAAAAACo=', 0), } ]
Convertir double a binData:
Entrada:
db.t.insertOne( { a: Double(42.0) } )
db.t.aggregate([ { $project: { _id: 0, convertedBD: { $convert: { input: "$a", to: "binData", } }, } } ])
Resultado:
[ { convertedBD: Binary.createFromBase64('AAAAAAAARUA=', 0) } ]
Convertir int a binData:
Entrada:
db.t.insertOne( { a: 42 } )
db.t.aggregate([ { $project: { _id: 0, convertedBD: { $convert: { input: "$a", to: "binData", } }, } } ])
Resultado:
[ { convertedBD: Binary.createFromBase64('KgAAAA==', 0) } ]
Convertir un arreglo de valores numéricos a binData:
Este ejemplo muestra cómo $convert convierte arreglos que contienen diferentes tipos de valores numéricos en binData.
Entrada:
db.t.insertMany([ // Empty array { a: [ ] }, // Bool array { a: [ false, true, true, true, true, true, true, true, false, false, false, false, false, true, true, true ] }, // Int array { a: [NumberInt(0), NumberInt(1), NumberInt(0), NumberInt(10)] }, // Double array { a: [ Double(0.0), Double(1.0), Double(0.0), Double(1.0), Double(3.14) ] }, ])
db.t.aggregate([ { $project: { _id: 0, original: "$a", convertedVector: { $convert: { input: "$a", to: { type: "binData" } } } } } ])
Resultado:
[ { original: [], convertedVector: Binary.fromPackedBits(new Uint8Array([])) }, { original: [ false, true, true, true, true, true, true, true, false, false, false, false, false, true, true, true ], convertedVector: Binary.fromPackedBits(new Uint8Array([ 127, 7 ])) }, { original: [ 0, 1, 0, 10 ], convertedVector: Binary.fromInt8Array(new Int8Array([ 0, 1, 0, 10 ])) }, { original: [ 0, 1, 0, 1, 3.14 ], convertedVector: Binary.fromFloat32Array(new Float32Array([ 0, 1, 0, 1, 3.140000104904175 ])) } ]
Convertir de string a BinData
MongoDB también admite conversiones entre binData y cadenas de texto.
Los siguientes ejemplos demuestran cómo convertir strings a binData.
Ejemplo | Resultado | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| | |||||||||||
| | |||||||||||
| | |||||||||||
| | |||||||||||
| | |||||||||||
| | |||||||||||
| |
Nota
A partir de MongoDB 8.1, $convert devuelve un error al intentar convertir entre diferentes subtipos de binData. En MongoDB 8.0, $convert devuelve el valor original y el subtipo original: no se realiza ninguna conversión. Las versiones de MongoDB anteriores a la 8.0 no realizan conversión de binData.
Convertir en arreglo
Nuevo en la versión 8.3.
La siguiente tabla enumera los tipos de input que pueden convertirse en un arreglo:
Tipo de entrada | Comportamiento |
|---|---|
binData | Devuelve un arreglo de valores numéricos. El tipo numérico de los elementos del arreglo depende del formato binData. |
String | Devuelve un arreglo correspondiente al contenido dentro del string. La string debe contener caracteres que representen un JSON válido. |
Nulo o Faltante | Devuelve nulo. |
La siguiente tabla enumera algunos ejemplos de conversión de string a arreglo:
Ejemplo | Resultados | ||
|---|---|---|---|
| [ 1, 2, 3 ] | ||
| [ 'a', 'b', 'c' ] | ||
| [ ] | ||
| Error: Input no coincide con el tipo esperado 'arreglo' | ||
| Error: Conversión no compatible de int a arreglo en $convert sin un valor onError | ||
| Error: el input no representa un JSON válido: valor autónomo inesperado | ||
| [ { '$oid': '507f1f77bcf86cd799439011' } ] | ||
| [ 1, 2, 3 ] NotaLa opción | ||
| 'on error!' | ||
| 'on null!' |
Convertir BinData en arreglo
Este ejemplo muestra cómo $convert convierte binData de diferentes formatos en arreglos que contienen valores de sus respectivos tipos:
input:
db.t.insertMany([ // Empty PACKED_BIT vector converts to empty array { v: BinData(9, "EAA=") }, // PACKED_BIT vector converts to bool array { v: BinData(9, "EAB/Bw==") }, // INT8 vector converts to int array { v: BinData(9, "AwAAAQ==") }, // FLOAT32 vector converts to double array { v: BinData(9, "JwCamZk+") }, // FLOAT32 vector with special values converts to [-Infinity, 0, Infinity] { v: BinData(9, "JwAAAID/AAAAAAAAgH8=") } ])
db.t.aggregate([ { $project: { _id: 0, original: "$v", asArray: { $convert: { input: "$v", to: { type: "array" } } } } } ])
Resultado:
[ { original: Binary.fromPackedBits(new Uint8Array([])), asArray: [] }, { original: Binary.fromPackedBits(new Uint8Array([ 127, 7 ])), asArray: [ false, true, true, true, true, true, true, true, false, false, false, false, false, true, true, true ] }, { original: Binary.fromInt8Array(new Int8Array([ 0, 1 ])), asArray: [ 0, 1 ] }, { original: Binary.fromFloat32Array(new Float32Array([ 0.30000001192092896 ])), asArray: [ 0.30000001192092896 ] }, { original: Binary.fromFloat32Array(new Float32Array([ -Infinity, 0, Infinity ])), asArray: [ -Infinity, 0, Infinity ] } ]
Convertir a objeto
Nuevo en la versión 8.3.
La siguiente tabla enumera los tipos de input que se pueden convertir en un objeto:
Tipo de entrada | Comportamiento |
|---|---|
String | Devuelve un document correspondiente al contenido dentro de la string. La string debe contener caracteres que representen un objeto JSON válido. |
Nulo o Faltante | Devuelve nulo. |
La siguiente tabla muestra algunos ejemplos de conversión a objetos:
Ejemplo | Resultados | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| { a: 1, b: 2 } | ||||||||
| { } | ||||||||
| Error: input no coincide con el tipo esperado 'objeto' | ||||||||
| Error: el input no representa un JSON válido: valor autónomo inesperado | ||||||||
| Error: input no representa un JSON válido: byte nulo incrustado no permitido | ||||||||
| { name: 'fox00o' } | ||||||||
| { a: 3, b: 2 } | ||||||||
| { foo: null } | ||||||||
| { foo: falso } | ||||||||
| { ['__proto__']: { foo: null } } | ||||||||
| { foo: 'NaN' } | ||||||||
| { foo: 123 } | ||||||||
| { foo:Long('4294967296') } | ||||||||
| {foo: 1.123123 } | ||||||||
| { foo: 1200 } | ||||||||
| { largePos: 18446744073709552000 } | ||||||||
| { largeNeg: -18446744073709552000 } | ||||||||
| Nulo | ||||||||
| { objectId: '507f1f77bcf86cd799439011', uuid: '3b241101-e2bb-4255-8caf-4136c566a962', date: '2018-03-27T16:58:51.538Z', regex: '/^ABC/i', js: 'function (s) {return s + "foo";}', timestamp: 'Timestamp(1565545664, 1)', arr: [ 1, 2, 3 ] } |
Convertir a Booleano
La siguiente tabla enumera los tipos de entrada que pueden convertirse en booleanos:
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.
En la siguiente tabla se enumeran algunos ejemplos de conversión a booleanos:
Ejemplo | Resultados | ||||
|---|---|---|---|---|---|
| true | ||||
| false | ||||
| true | ||||
| true | ||||
| false | ||||
| true | ||||
| true | ||||
| true | ||||
| true | ||||
| true | ||||
| Nulo |
Convertir a 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. |
BinData | Devuelve el valor El número de bytes en el valor Si la |
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 double cuyo valor truncado sea inferior al valor entero mínimo o superior al 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 del string como un entero. Si omites Si especificas |
En la siguiente tabla se enumeran algunos ejemplos de conversión a enteros:
Ejemplo | Resultados | |||||
|---|---|---|---|---|---|---|
| 1 | |||||
| 0 | |||||
| 1 | |||||
| 5 | |||||
| Error | |||||
| 5000 | |||||
| Error | |||||
| -2 | |||||
| Error | |||||
| Nulo | |||||
| 1048576 | |||||
| -1763180545 | |||||
| Error: No se pudo convertir BinData debido a una longitud inválida: 7 |
Convertir 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. Si omites Si se especifica " |
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 decimal:
Ejemplo | Resultados | ||||
|---|---|---|---|---|---|
| Decimal128("1") | ||||
| Decimal128("0") | ||||
| Decimal128( "2.50000000000000" ) | ||||
| Decimal128("5") | ||||
| Decimal128("10000") | ||||
| Decimal128("-5.5") | ||||
| Decimal128("1522039108044") |
Convertir 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. |
BinData | Retorna el valor El número de bytes del valor Si la |
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 puedes convertir un valor decimal cuyo valor es menor que el valor double mínimo o mayor que el valor double 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. Si omites Si especificas |
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 | |||||
| 4.814824932714571e-36 | |||||
| Error: No se pudo convertir binData debido a una longitud inválida: 2 |
Números subnormales
A partir de MongoDB 8.3, el servidor puede analizar todo el rango de números representables de punto flotante de double precisión. Esto incluye números subnormales en los que el dígito más significativo tiene ceros iniciales y el exponente tiene el valor más bajo posible. Para más detalles, consulte Número subnormal.
En versiones anteriores de MongoDB, el servidor devuelve un error al intentar analizar estos números. El siguiente ejemplo genera un error en versiones anteriores a MongoDB 8.3:
db.t.insertOne( { v: "7.08263e-317" } ) db.t.aggregate([ { $project: { converted: { $convert: { input: "$v", to: "double" }, } } } ])
Este ejemplo falla con un error similar al siguiente:
MongoServerError[ConversionFailure]: Executor error during aggregate command on namespace: test.t :: caused by :: Failed to parse number '7.08263e-317' in $convert with no onError value: Out of range
Convertir a longitud
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. |
BinData | Devuelve el valor El número de bytes en el valor Si la |
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-op. Devuelve el valor long. |
String | Devuelve el valor numérico de la string. Si omites Si especificas |
fecha | Convierte la fecha en el número de milisegundos transcurridos desde la Unix epoch. |
La siguiente tabla muestra algunos ejemplos de conversión a long:
Ejemplo | Resultados | |||||
|---|---|---|---|---|---|---|
| Long("1") | |||||
| Long("0") | |||||
| Largo("2") | |||||
| Prolongado ("5") | |||||
| Error | |||||
| Long("8") | |||||
| Long("1522039108044") | |||||
| large("-2") | |||||
| Error | |||||
| Nulo | |||||
| Long("1048576") |
Convertir a Fecha
En la siguiente tabla se enumeran los tipos de datos que se pueden convertir en una fecha:
Tipo de entrada | Comportamiento |
|---|---|
Double | Devuelve una fecha que corresponde al número de milisegundos representado por el valor double truncado. Un número positivo corresponde al número de milisegundos desde el 1 de enero de 1970. Un número negativo corresponde al número de milisegundos anteriores al 1 de enero de 1970. |
Decimal | Devuelve una fecha que corresponde al número de milisegundos representado por el valor decimal truncado. Un número positivo corresponde al número de milisegundos desde el 1 de enero de 1970. Un número negativo corresponde al número de milisegundos anteriores al 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. Un número negativo corresponde al número de milisegundos anteriores al 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") | ||||
| ISODate("2004-11-09T11:33:20.000Z") | ||||
| ISODate("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 | ||||
| ISODate("2021-11-23T17:21:58.000Z") |
Convertir a 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 |
Convertir a string
La siguiente tabla enumera los tipos de entrada que se pueden convertir en una string:
Tipo de entrada | Comportamiento |
|---|---|
Arreglo | Retorna la Nuevo en la versión 8.3. |
BinData | Si el |
Booleano | Devuelve el valor booleano como una string. |
fecha | Retorna la |
Decimal | Devuelve el valor |
Double | Devuelve el valor |
entero | Devuelve el valor |
Long | Devuelve el valor |
Clave máxima | Retorna la Nuevo en la versión 8.3. |
MinKey | Retorna la Nuevo en la versión 8.3. |
Objeto | Devuelve el objeto como un string. Nuevo en la versión 8.3. |
ObjectId | Retorna el valor |
Expresión regular | Retorna la Nuevo en la versión 8.3. |
String | Sin operación. Devuelve el valor de la string. |
Marca de tiempo | Retorna la Nuevo en la versión 8.3. |
Nota
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" | ||||||
| 'hn3f' | ||||||
| "invalid" |
Ejemplos
Ejemplo de conversión de base
Cree una colección examples con un document de marcador de posición:
db.examples.insertOne({ _id: 1 })
El siguiente ejemplo convierte entre números y cadenas utilizando diferentes bases:
db.examples.aggregate([ { $project: { _id: 0, bin: { $convert: { input: 10, to: "string", base: 2 } }, hex: { $convert: { input: 10, to: "string", base: 16 } }, intFromBin: { $convert: { input: "1010", to: "int", base: 2 } }, intFromHex: { $convert: { input: "A", to: "int", base: 16 } } } } ])
Esta operación devuelve el siguiente document:
{ bin: "1010", hex: "A", intFromBin: 10, intFromHex: 10 }
Ejemplo de conversión de tipos
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' }
Obtén más información
Convertir un valor en un arreglo con
$toArrayConvertir un string en un objeto con
$toObjectConvierte un valor a un booleano con
$toBoolConvierte un valor en un número entero utilizando
$toIntConvierte un valor a un decimal con
$toDecimalConvierte un valor a double con
$toDoubleConvierte un valor a long con
$toLongConvierta un valor en una fecha con
$toDateConvertir un valor a un ObjectId con
$toObjectIdConvierta un valor a una string con
$toStringConvierte una date string en un objeto de fecha con
$dateFromStringConvertir un objeto de fecha a una string con
$dateToString