6

我有以下文件

> db.people.insert({name: "Bob"})
> db.people.insert({name: 42})

如果我需要按类型查找,String我可以使用:

> db.people.find({name: { $type: 2 })

其中2 是字符串的类型号

但是我怎么能按类型找到Number呢?

> typeof db.people.findOne({name: 42}).name
number

可能的类型number中没有类型。

upd:我尝试按 16 和 18 类型查找。这是行不通的。

> db.people.find({ name: 42 })
{ "_id" : ObjectId("509645ae5013826ee61d96ac"), "name" : 42 }
> db.people.find({name: { $type: 16 }})
> db.people.find({name: { $type: 18 }})
4

2 回答 2

9

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)
}
于 2012-11-04T12:13:23.693 回答
0

在 javascript 中,int32 和 int64 之间没有真正的区别。然而,Mongodb shell 使用 32 位,除非另有说明(使用 Number(..) 构造函数)。

您应该尝试这样查询:

db.people.find({name: { $type: 16 })

其中 16 是整数的类型代码:http ://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24type

于 2012-11-04T11:24:34.663 回答