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

$toDouble (operador de expresión)

$toDouble

Convierte un valor a un double. Si no se puede convertir el valor en un double, $toDouble errores. Si el valor es nulo o falta, $toDouble devuelve nulo.

$toDouble tiene la siguiente sintaxis:

{
$toDouble: <expression>
}

El $toDouble acepta cualquier expresión.

El $toDouble es una abreviatura de la siguiente expresión $convert:

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

La siguiente tabla enumera los tipos de entrada que se pueden convertir a doble:

Tipo de entrada
Comportamiento

Booleano

Returns 0 for false.
Returns 1 for true.

Double

Sin operación. Devuelve el double.

Decimal

Devuelve el valor decimal como un double.

El valor decimal debe estar dentro del valor mínimo y máximo para un double.

No puedes convertir un valor decimal cuyo valor es menor que el valor double mínimo o mayor que el valor double máximo.

entero

Devuelve el valor int como un double.

Long

Devuelve el valor largo como un double.

String

Retorna el valor numérico de la string como un doble.

El valor de cadena debe ser un valor numérico en base 10 (ejemplo, "-5.5", "123456") y debe estar en el rango del valor mínimo al máximo para un double.

No se puede convertir un valor de string de un número que no sea de base 10 (p. ej., "0x6400") o un valor que esté fuera del valor mínimo y máximo de un double.

fecha

Devuelve la cantidad de milisegundos desde la Unix epoch que corresponde al valor de la fecha.

Tip

Para convertir cadenas en bases distintas de 10, use $convert con la opción base.

La siguiente tabla enumera algunos ejemplos de conversión a doble:

Ejemplo
Resultados

$toDouble: true

1

$toDouble: false

0

$toDouble: 2.5

2.5

$toDouble: Int32(5)

5

$toDouble: Long(10000)

10000

$toDouble: "-5.5"

-5.5

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

1522127087890

A partir de MongoDB 8.3, el servidor puede analizar todo el rango de números representables de punto flotante de double precisión. Esto incluye números subnormales en los que el dígito más significativo tiene ceros iniciales y el exponente tiene el valor más bajo posible. Para más detalles, consulte Número subnormal.

En versiones anteriores de MongoDB, el servidor devuelve un error al intentar analizar estos números. El siguiente ejemplo genera un error en versiones anteriores a MongoDB 8.3:

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

Este ejemplo falla con un error similar al siguiente:

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

Cree una colección weather con los siguientes 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" },
] )

La siguiente operación de agregación en la colección weather analiza el valor temp y lo convierte a un double:

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

La operación devuelve los siguientes 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 }

Nota

Si la operación de conversión encuentra un error, la operación de agregación se detiene y genera un error. Para anular este comportamiento, use $convert en su lugar.

Volver

$toDecimal

En esta página