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

MongoDB $toInt

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.