Depuis MongoDB 4.0, vous pouvez utiliser le $toInt
opérateur de pipeline d'agrégation pour convertir une valeur en entier.
La plupart des types peuvent être convertis en nombre entier, mais les valeurs ObjectId et Date ne le peuvent pas.
Lorsque vous convertissez un booléen en entier, si le booléen est true
, alors l'entier est 1
. Si le booléen est false
, alors l'entier est 0
.
Les valeurs numériques telles que le double et la décimale sont tronquées si nécessaire.
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 $toInt
opérateur pour convertir ces champs (sauf pour le _id
et date
champs) à un entier. Si l'entrée est déjà un entier, elle renvoie simplement l'entier.
db.types.aggregate(
[
{
$project:
{
_id: 0,
double: { $toInt: "$double" },
string: { $toInt: "$string" },
boolean: { $toInt: "$boolean" },
integer: { $toInt: "$integer" },
long: { $toInt: "$long" },
decimal: { $toInt: "$decimal" }
}
}
]
).pretty()
Résultat :
{ "double" : 123, "string" : 123, "boolean" : 1, "integer" : 123, "long" : 123, "decimal" : 123 }
Notez que j'ai exclu la date
et _id
champs de l'opération, car ces types ne peuvent pas être convertis en nombre entier.
Erreurs
Si vous rencontrez des erreurs, essayez d'utiliser le $convert
opérateur au lieu de $toInt
. Le $convert
vous permet de gérer les erreurs sans affecter l'ensemble de l'opération d'agrégation.
Le $toInt
est l'équivalent d'utiliser le $convert
opérateur pour convertir une valeur en entier.
Voici un exemple d'utilisation de $convert
pour essayer de convertir une date en entier (ce qui se traduit par une erreur) :
db.types.aggregate(
[
{
$project:
{
_id: 0,
result:
{
$convert: {
input: "$date",
to: "int",
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.