MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB $toBool

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.