JavaScript ( )中只有一种数字类型Number
,它以二进制表示为 IEEE 754 浮点数 (double)。
在BSON 规范中,这将表示为双精度(类型 1),因此您应该能够找到:
db.people.find({name: { $type: 1 }})
mongo
如果你想插入不同的 BSON数据类型,有一些shell 助手:
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)
例如:
db.people.insert({ name: 'default', num: 42 })
db.people.insert({ name: 'NumberLong', num: NumberLong(42) })
db.people.insert({ name: 'NumberInt', num: NumberInt(42) })
如果您对可以以多种格式表示的数字执行 a 操作,不同的数字表示仍将匹配find()
(即 32 位整数也可以表示为 double 或 int64)。
例如:
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
}
但是,如果您通过 找到$type
,则 BSON 表示是不同的:
> 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)
}