$toDouble (agregação)
Nesta página
Definiçã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" } }
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. |
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: NumberInt(5) | 5 |
$toDouble: NumberLong(10000) | 10.000 |
$toDouble: "-5.5" | -5.5 |
$toDouble: ISODate("2018-03-27T05:04:47.890Z") | 1522127087890 |
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.