Depuis MongoDB 4.0, vous pouvez utiliser le $toBool opérateur de pipeline d'agrégation pour convertir une valeur en booléen.
Lorsque vous convertissez une valeur en booléen, le résultat sera true ou false , en fonction de la valeur d'entrée.
Généralement, pour les valeurs numériques, cela renverra false si la valeur est zéro (0 ) et true pour toute autre valeur.
Pour les valeurs de chaîne, ObjectId et Date, il renverra toujours true .
Exemple
Supposons que nous ayons une collection appelée types et il contient les documents suivants :
{ "_id" :ObjectId("60133e50c8eb4369cf6ad9d9"), "double" :123.75, "string" :"123", "boolean" :true, "date" :ISODate("2020-12-31T23:30 :15.123Z"), "integer" :123, "long" :NumberLong(123), "decimal" :NumberDecimal("123.75")}{ "_id" :ObjectId("60133e50c8eb4369cf6ad9da"), "double" :0, " string" :"", "boolean" :false, "date" :null, "integer" :0, "long" :NumberLong(0), "decimal" :NumberDecimal("0.0")}
Nous pouvons utiliser le $toBool opérateur pour convertir tous ces types en booléen. Si l'entrée est un booléen, il renvoie simplement le booléen.
db.types.aggregate(
[
{
$project:
{
_id: 0,
objectId: { $toBool: "$_id" },
double: { $toBool: "$double" },
string: { $toBool: "$string" },
boolean: { $toBool: "$boolean" },
date: { $toBool: "$date" },
integer: { $toBool: "$integer" },
long: { $toBool: "$long" },
decimal: { $toBool: "$decimal" }
}
}
]
).pretty() Résultat :
{ "objectId" :vrai, "double" :vrai, "string" :vrai, "boolean" :vrai, "date" :vrai, "integer" :vrai, "long" :vrai, "decimal" :true}{ "objectId" :true, "double" :false, "string" :true, "boolean" :false, "date" :null, "integer" :false, "long" :false, "decimal" :false }
Nous pouvons voir que toutes les valeurs du premier document ont renvoyé true , mais beaucoup dans le deuxième document ont renvoyé false . De plus, la valeur de date a renvoyé null car il était null pour commencer.
Erreurs
Si vous rencontrez des erreurs, essayez d'utiliser le $convert opérateur au lieu de $toBool . Le $convert vous permet de gérer les erreurs sans affecter l'ensemble de l'opération d'agrégation.
Le $toBool est l'équivalent d'utiliser le $convert opérateur pour convertir une valeur en booléen.
Voici un exemple d'utilisation de $convert pour convertir une chaîne en booléen : :
db.types.aggregate(
[
{
$project:
{
_id: 0,
result:
{
$convert: {
input: "$string",
to: "bool",
onError: "An error occurred",
onNull: "Input was null or empty"
}
}
}
}
]
)
Résultat :
{ "résultat" :vrai }
Voir MongoDB $convert pour plus d'exemples.