Depuis MongoDB 4.0, vous pouvez utiliser le $toDouble
opérateur de pipeline d'agrégation pour convertir une valeur en double.
La plupart des types peuvent être convertis en double, mais l'ObjectId ne le peut pas.
Lorsque vous convertissez une valeur Date en double, $toDouble
renvoie le nombre de millisecondes depuis l'époque qui correspond à la valeur de date.
Lorsque vous convertissez un booléen en double, si le booléen est true
, alors le double vaut 1
. Si le booléen est false
, alors le double est 0
.
Exemple
Supposons que nous ayons une collection appelée types
et il contient les documents suivants :
{ "_id" : ObjectId("601340eac8eb4369cf6ad9db"), "double" : 123.75, "string" : "123", "boolean" : true, "date" : ISODate("2020-12-31T23:30:15.123Z"), "integer" : 123, "long" : NumberLong(123), "decimal" : NumberDecimal("123.75") }
Nous pouvons utiliser le $toDouble
opérateur pour convertir ces types (à l'exception de l'ObjectId) en un double. Si l'entrée est déjà un double, elle renvoie simplement le double.
db.types.aggregate(
[
{
$project:
{
_id: 0,
double: { $toDouble: "$double" },
string: { $toDouble: "$string" },
boolean: { $toDouble: "$boolean" },
date: { $toDouble: "$date" },
integer: { $toDouble: "$integer" },
long: { $toDouble: "$long" },
decimal: { $toDouble: "$decimal" }
}
}
]
).pretty()
Résultat :
{ "double" : 123.75, "string" : 123, "boolean" : 1, "date" : 1609457415123, "integer" : 123, "long" : 123, "decimal" : 123.75 }
Erreurs
Si vous rencontrez des erreurs, essayez d'utiliser le $convert
opérateur au lieu de $toDouble
. Le $convert
vous permet de gérer les erreurs sans affecter l'ensemble de l'opération d'agrégation.
Le $toDouble
est l'équivalent d'utiliser le $convert
opérateur pour convertir une valeur en double.
Voici un exemple d'utilisation de $convert
pour essayer de convertir un ObjectId en double (ce qui se traduit par une erreur) :
db.types.aggregate(
[
{
$project:
{
_id: 0,
result:
{
$convert: {
input: "$_id",
to: "double",
onError: "An error occurred",
onNull: "Input was null or empty"
}
}
}
}
]
)
Résultat :
{ "result" : "An error occurred" }
Utiliser $convert
nous a permis de spécifier le message d'erreur à utiliser lorsque l'erreur s'est produite, et cela n'a pas interrompu l'ensemble de l'opération d'agrégation.
Voir MongoDB $convert
pour plus d'exemples.