Existuje pouze jeden číselný typ
v JavaScriptu (Number
), které je reprezentováno binárně jako číslo s pohyblivou řádovou čárkou IEEE 754 (dvojité).
Ve specifikaci BSON toto bude reprezentováno jako double (typ 1), takže byste měli být schopni najít pomocí:
db.people.find({name: { $type: 1 }})
Existuje několik mongo
shell helpers, pokud chcete vložit různé BSON datové typy
:
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)
Takže například:
db.people.insert({ name: 'default', num: 42 })
db.people.insert({ name: 'NumberLong', num: NumberLong(42) })
db.people.insert({ name: 'NumberInt', num: NumberInt(42) })
Různé číselné reprezentace se budou stále shodovat, pokud provedete find()
na čísle, které může být reprezentováno ve více formátech (tj. 32bitové celé číslo může být také reprezentováno jako double nebo int64).
Například:
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
}
Pokud však najdete podle $type
, reprezentace BSON je jiná:
> 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)
}