Il n'y a qu'un un seul type numérique
en JavaScript (Number
), qui est représenté en binaire par un nombre à virgule flottante IEEE 754 (double).
Dans la spec BSON cela sera représenté par un double (type 1), vous devriez donc pouvoir trouver avec :
db.people.find({name: { $type: 1 }})
Il y a des mongo
aides shell si vous souhaitez insérer différents types de données BSON
:
42 // Type 1: double (64-bit IEEE 754 floating point, 8 bytes)
NumberInt(42) // Type 16: int32 (32-bit signed integer, 4 bytes)
NumberLong(42) // Type 18: int64 (64-bit signed integer, 8 bytes)
Ainsi, par exemple :
db.people.insert({ name: 'default', num: 42 })
db.people.insert({ name: 'NumberLong', num: NumberLong(42) })
db.people.insert({ name: 'NumberInt', num: NumberInt(42) })
Les différentes représentations numériques correspondront toujours si vous faites un find()
sur un nombre qui peut être représenté dans plusieurs formats (c'est-à-dire qu'un entier 32 bits peut également être représenté par un double ou un int64).
Par exemple :
db.people.find({num:42})
{
"_id" : ObjectId("50965aa3038d8c8e85fd3f45"),
"name" : "default",
"num" : 42
}
{
"_id" : ObjectId("50965aa3038d8c8e85fd3f46"),
"name" : "NumberLong",
"num" : NumberLong(42)
}
{
"_id" : ObjectId("50965aa3038d8c8e85fd3f47"),
"name" : "NumberInt",
"num" : 42
}
Cependant, si vous trouvez par $type
, la représentation BSON est différente :
> db.people.find({num: { $type: 1 }})
{
"_id" : ObjectId("50965aa3038d8c8e85fd3f45"),
"name" : "default",
"num" : 42
}
> db.people.find({num: { $type: 16 }})
{
"_id" : ObjectId("50965aa3038d8c8e85fd3f47"),
"name" : "NumberInt",
"num" : 42
}
> db.people.find({num: { $type: 18 }})
{
"_id" : ObjectId("50965aa3038d8c8e85fd3f46"),
"name" : "NumberLong",
"num" : NumberLong(42)
}