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

MongoDB $isNumber

Depuis MongoDB 4.4, vous pouvez utiliser le $isNumber opérateur de pipeline d'agrégation pour vérifier si une valeur est un nombre ou non.

Il accepte toute expression valide et renvoie true si l'expression est un nombre, false si ce n'est pas le cas.

Plus précisément, $isNumber vérifie si l'expression correspond à l'un des types BSON suivants :

  • Integer
  • Decimal
  • Double
  • Long

Il renvoie true si c'est le cas.

Il renvoie false si l'expression se résout en un autre type BSON, null , ou un champ manquant.

Exemple

Supposons que nous ayons une collection appelée dogs avec le document suivant :

{ "_id" : 1, "name" : "Fetch", "weight" : 30 } 

Nous pouvons utiliser le code suivant pour voir quels champs sont numériques :

db.dogs.aggregate(
  [
    {
      $project:
        { 
          _id: { $isNumber: "$_id" },
          name: { $isNumber: "$name" },
          weight: { $isNumber: "$weight" }
        }
    }
  ]
)

Résultat :

{ "_id" : true, "name" : false, "weight" : true }

Nous pouvons voir que le _id et weight les champs sont numériques, mais le name champ n'est pas (c'est une chaîne).

Exemple 2

Voici un autre exemple qui contient divers champs de différents types de BSON.

Supposons que nous ayons une collection appelée types avec le document suivant :

{
	"_id" : ObjectId("601738d7c8eb4369cf6ad9de"),
	"double" : 123.75,
	"string" : "123",
	"boolean" : true,
	"date" : ISODate("2020-12-31T23:30:15.123Z"),
	"integer" : 123,
	"long" : NumberLong(123),
	"decimal" : NumberDecimal("123.75"),
	"object" : {
		"a" : 1
	},
	"array" : [
		1,
		2,
		3
	]
}

Pour les besoins de cet article, j'ai nommé chaque champ pour refléter son type BSON.

Nous pouvons maintenant utiliser le code suivant pour renvoyer soit true ou false pour chaque champ, selon que le champ est un nombre ou non :

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

Résultat :

{
	"_id" : false,
	"double" : true,
	"string" : false,
	"boolean" : false,
	"date" : false,
	"integer" : true,
	"long" : true,
	"decimal" : true,
	"object" : false,
	"array" : false
}