Definición
$toDecimalConvierte un valor a decimal. Si el valor no se puede convertir a decimal, se
$toDecimalgenera$toDecimalun error. Si el valor es nulo o falta, devuelve un valor nulo.$toDecimaltiene la siguiente sintaxis:{ $toDecimal: <expression> } El toma cualquier valor
$toDecimalválido expresión.$toDecimales una abreviatura de la siguiente$convertexpresión:{ $convert: { input: <expression>, to: "decimal" } } Tip
Comportamiento
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("1522127087890") |
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", qty: 5, price: 5 } ] )
La siguiente operación de agregación en la colección orders convierte el price en un decimal y el qty en un entero antes de calcular el precio total:
// Define stage to add convertedPrice and convertedQty fields with the converted price and qty values priceQtyConversionStage = { $addFields: { convertedPrice: { $toDecimal: "$price" }, convertedQty: { $toInt: "$qty" }, } }; // Define stage to calculate total price by multiplying convertedPrice and convertedQty fields totalPriceCalculationStage = { $project: { item: 1, totalPrice: { $multiply: [ "$convertedPrice", "$convertedQty" ] } } }; db.orders.aggregate( [ priceQtyConversionStage, totalPriceCalculationStage ] )
La operación devuelve los siguientes documentos:
{ _id: 1, item: 'apple', totalPrice: Decimal128("50") }, { _id: 2, item: 'pie', totalPrice: Decimal128("200.0") }, { _id: 3, item: 'ice cream', totalPrice: Decimal128("9.98") }, { _id: 4, item: 'almonds', totalPrice: Decimal128("25") }
Nota
Si la operación de conversión detecta un error, la operación de agregación se detiene y genera un error. Para anular este comportamiento,$convert utilice.