Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

$toDecimal (agregação)

Nesta página

  • Definição
  • Comportamento
  • Exemplo
$toDecimal

Converte um valor para um decimal. Se o valor não puder ser convertido em decimal, $toDecimal apresentará erro. Se o valor for nulo ou estiver ausente, $toDecimal retornará nulo.

$toDecimal tem a seguinte sintaxe:

{
$toDecimal: <expression>
}

O $toDecimal usa qualquer expressãoválida.

O $toDecimal é uma abreviatura para a seguinte expressão $convert:

{ $convert: { input: <expression>, to: "decimal" } }

Dica

Veja também:

A tabela a seguir lista os tipos de entrada que podem ser convertidos em um número decimal:

Tipo de entrada
Comportamento

Boolean

Returns Decimal128("0") for false.
Returns Decimal128("1") for true.

Double

Retorna o valor double como decimal.

Decimal

Nenhum oplog. Retorna o decimal.

Inteiro

Retorna o valor int como decimal.

Long

Retorna o valor longo como decimal.

String

Retorna o valor numérico da string como decimal.

O valor da string deve ter um valor numérico 10 de base (por exemplo, "-5.5", "123456").

Não é possível converter um valor de string de um número 10 que não seja de base (por exemplo, "0x6400")

Data

Retorna o número de milissegundos desde a época que corresponde ao valor de data.

A tabela a seguir lista alguns exemplos de conversão para decimal:

Exemplo
Resultados

{$toDecimal: true}

Decimal128("1")

{$toDecimal: false}

Decimal128("0")

{$toDecimal: 2.5}

Decimal128("2,50000000000000")

{$toDecimal: NumberInt(5)}

Decimal128("5")

{$toDecimal: NumberLong(10000)}

Decimal128("10.000")

{$toDecimal: "-5.5"}

Decimal128("-5,5")

{$toDecimal: ISODate("2018-03-27T05:04:47.890Z")}

Decimal128("1522127087890")

Crie uma collection orders com os seguintes documentos:

db.orders.insertMany( [
{ _id: 1, item: "apple", qty: 5, price: 10 },
{ _id: 2, item: "pie", qty: 10, price: NumberDecimal("20.0") },
{ _id: 3, item: "ice cream", qty: 2, price: "4.99" },
{ _id: 4, item: "almonds", qty: 5, price: 5 }
] )

A seguinte operação de aggregation na collection orders converte price para um decimal e qty para um número inteiro antes de calcular o preço 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
] )

A operação retorna os seguintes 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") }

Observação

Se a operação de conversão encontrar um erro, a operação de aggregation interromperá e exibirá um erro. Para substituir esse comportamento, use $convert em vez disso.

Voltar

$toDate