Definição
$toDoubleConverte um valor em double. Se o valor não puder ser convertido em double,
$toDoubleapresentará erro. Se o valor for nulo ou estiver ausente,$toDoubleretornará nulo.$toDoubletem a seguinte sintaxe:{ $toDouble: <expression> } O
$toDoubleusa qualquer expressãoválida.O
$toDoubleé uma abreviatura para a seguinte expressão$convert:{ $convert: { input: <expression>, to: "double" } }
Comportamento
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, Você não pode converter um valor de string de um número 10 que não seja de base (por exemplo, |
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 |
|---|---|
| 1 |
| 0 |
| 2.5 |
| 5 |
| 10.000 |
| -5.5 |
| 1522127087890 |
Números subnormais
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
Exemplo
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.