Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Menu Docs
Página inicial do Docs
/ /

$toDouble (operador de expressão )

$toDouble

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

$toDouble tem a seguinte sintaxe:

{
$toDouble: <expression>
}

O $toDouble usa qualquer expressãoválida.

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

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

A tabela a seguir lista os tipos de entrada que podem ser convertidos em double:

Tipo de entrada
Comportamento

Boolean

Returns 0 for false.
Returns 1 for true.

Double

Nenhum oplog. Retorna o double.

Decimal

Retorna o valor decimal como double.

O valor decimal deve cair dentro do valor mínimo e máximo para um double.

Você não pode converter um valor decimal cujo valor é menor que o double mínimo ou maior que o double máximo.

Inteiro

Retorna o valor inteiro como double.

Long

Retorna o valor longo como double.

String

Retorna o valor numérico da string como double.

O valor da string deve ser de um valor numérico 10 de base (por exemplo, "-5.5", "123456") e cair dentro do valor mínimo e máximo para um double.

Você não pode converter um valor de string de um número 10 que não seja de base (por exemplo, "0x6400") ou um valor que está fora do valor mínimo e máximo para um double.

Data

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

Dica

Para converter strings em bases diferentes de 10, use $convert com a opção base.

A tabela a seguir lista alguns exemplos de conversão em double:

Exemplo
Resultados

$toDouble: true

1

$toDouble: false

0

$toDouble: 2.5

2.5

$toDouble: Int32(5)

5

$toDouble: Long(10000)

10.000

$toDouble: "-5.5"

-5.5

$toDouble: ISODate("2018-03-27T05:04:47.890Z")

1522127087890

A partir do MongoDB 8.3, o servidor é capaz de analisar toda a faixa de todos os números de double de ponto flutuante de precisão representáveis. Isso inclui números subnormais em que o dígito mais significativo tem zeros à esquerda e o expoente tem o menor valor possível. Para obter detalhes, consulte Número subnormal.

Nas versões anteriores do MongoDB, o servidor retorna um erro quando você tenta analisar esses números. O exemplo a seguir gera um erro em versões anteriores ao MongoDB 8.3:

db.t.insertOne( { v: "7.08263e-317" } )
db.t.aggregate([
{
$project: {
converted: {
$convert: { input: "$v", to: "double" },
}
}
}
])

Este exemplo falha com um erro semelhante ao seguinte:

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

Crie uma collection weather com os seguintes documentos:

db.weather.insertMany( [
{ _id: 1, date: new Date("2018-06-01"), temp: "26.1C" },
{ _id: 2, date: new Date("2018-06-02"), temp: "25.1C" },
{ _id: 3, date: new Date("2018-06-03"), temp: "25.4C" },
] )

A seguinte operação de agregação na collection weather analisa o valor temp e converte para double:

// Define stage to add degrees field with converted value
tempConversionStage = {
$addFields: {
degrees: { $toDouble: { $substrBytes: [ "$temp", 0, 4 ] } }
}
};
db.weather.aggregate( [
tempConversionStage,
] )

A operação retorna os seguintes documentos:

{ "_id" : 1, "date" : ISODate("2018-06-01T00:00:00Z"), "temp" : "26.1C", "degrees" : 26.1 }
{ "_id" : 2, "date" : ISODate("2018-06-02T00:00:00Z"), "temp" : "25.1C", "degrees" : 25.1 }
{ "_id" : 3, "date" : ISODate("2018-06-03T00:00:00Z"), "temp" : "25.4C", "degrees" : 25.4 }

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

$toDecimal

Nesta página