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 étaitnull
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.