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

MongoDB $toLong

Depuis MongoDB 4.0, vous pouvez utiliser le $toLong opérateur de pipeline d'agrégation pour convertir une valeur en long.

La plupart des types peuvent être convertis en long, mais l'ObjectId ne le peut pas.

Lorsque vous convertissez une valeur de date en un long, $toLong renvoie le nombre de millisecondes depuis l'époque qui correspond à la valeur de date.

Lorsque vous convertissez un booléen en long, si le booléen est true , alors le long est 1 . Si le booléen est false , alors le long est 0 .

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 $toLong opérateur pour convertir ces champs (sauf pour le _id champ) à une longue. Si l'entrée est déjà un long, elle renvoie simplement le long.

db.types.aggregate(
  [
    {
      $project:
        { 
          _id: 0,
          double: { $toLong: "$double" },
          string: { $toLong: "$string" },
          boolean: { $toLong: "$boolean" },
          date: { $toLong: "$date" },
          integer: { $toLong: "$integer" },
          long: { $toLong: "$long" },
          decimal: { $toLong: "$decimal" }
        }
    }
  ]
).pretty()

Résultat :

{
	"double" : NumberLong(123),
	"string" : NumberLong(123),
	"boolean" : NumberLong(1),
	"date" : NumberLong("1609457415123"),
	"integer" : NumberLong(123),
	"long" : NumberLong(123),
	"decimal" : NumberLong(123)
}

Erreurs

Si vous rencontrez des erreurs, essayez d'utiliser le $convert opérateur au lieu de $toLong . Le $convert vous permet de gérer les erreurs sans affecter l'ensemble de l'opération d'agrégation.

Le $toLong est l'équivalent d'utiliser le $convert opérateur pour convertir une valeur en long.

Voici un exemple d'utilisation de $convert pour essayer de convertir un ObjectId en long (ce qui entraîne une erreur) :

db.types.aggregate(
  [
    {
      $project:
        { 
          _id: 0,
          result: 
          {
            $convert: { 
              input: "$_id", 
              to: "long",
              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.