Definición
$toDecimalConvierte un valor a decimal. Si el valor no se puede convertir a decimal,
$toDecimalerrores. Si el valor es nulo o falta,$toDecimaldevuelve nulo.$toDecimaltiene la siguiente sintaxis:{ $toDecimal: <expression> } El toma cualquier valor
$toDecimalválido expresión.El
$toDecimales una abreviatura de la siguiente expresión$convert:{ $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 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("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.