Vanaf MongoDB 4.4 kunt u de $isNumber
. gebruiken aggregatiepijplijnoperator om te controleren of een waarde een getal is.
Het accepteert elke geldige uitdrukking en retourneert true
als de uitdrukking een getal is, false
als dat niet het geval is.
In het bijzonder $isNumber
controleert of de uitdrukking wordt omgezet in een van de volgende BSON-typen:
Integer
Decimal
Double
Long
Het retourneert true
zo ja.
Het retourneert false
als de uitdrukking wordt omgezet in een ander BSON-type, null
, of een ontbrekend veld.
Voorbeeld
Stel dat we een verzameling hebben met de naam dogs
met het volgende document:
{ "_id" : 1, "name" : "Fetch", "weight" : 30 }
We kunnen de volgende code gebruiken om te zien welke velden numeriek zijn:
db.dogs.aggregate(
[
{
$project:
{
_id: { $isNumber: "$_id" },
name: { $isNumber: "$name" },
weight: { $isNumber: "$weight" }
}
}
]
)
Resultaat:
{ "_id" : true, "name" : false, "weight" : true }
We kunnen zien dat de _id
en weight
velden zijn numeriek, maar de name
veld is niet (het is een string).
Voorbeeld 2
Hier is nog een voorbeeld dat verschillende velden van verschillende BSON-typen bevat.
Stel dat we een verzameling hebben met de naam types
met het volgende document:
{ "_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 ] }
Voor het doel van dit artikel heb ik elk veld een naam gegeven om het BSON-type weer te geven.
We kunnen nu de volgende code gebruiken om true
. te retourneren of false
voor elk veld, afhankelijk van of het veld een nummer is:
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()
Resultaat:
{ "_id" : false, "double" : true, "string" : false, "boolean" : false, "date" : false, "integer" : true, "long" : true, "decimal" : true, "object" : false, "array" : false }