NumberLong和简单Integer之间的MongoDB差异?

Fra*_*sta 13 mongodb

MongoDB中数据类型double,NumberLong,NumberInt或简单Integer之间的主要区别(大小,速度等)是什么?

如果我想保存一个小的固定数字(0到1000之间)我应该使用哪种数据类型?

Jay*_*ram 25

NumberInt

默认情况下,mongo shell将所有数字视为浮点值.mongo shell提供NumberInt()构造函数以显式指定32位整数.

NumberLong

默认情况下,mongo shell将所有数字视为浮点值.mongo shell提供了NumberLong()处理64位整数的类.

NumberLong()构造函数接受的,只要一个字符串:

NumberLong("2090845886852")
Run Code Online (Sandbox Code Playgroud)

资料来源:http://docs.mongodb.org/manual/core/shell-types/

  • 外壳和MongoDB本身是两回事,外壳对待整数浮法becaue一个javascript限制,但MongoDB的就会把它们当做int和因为被指定在这里没有语言,你不能依靠INT为float治疗存在的为运 (2认同)

Flo*_*ter 16

NumberLong和NumberInt不是MongoDB中的数据类型,而是MongoDB shell中的JavaScript函数.

MongoDB中的数据类型在BSON规范中定义:http://bsonspec.org/spec.html

数字存储为类型0x01(浮点),类型0x10(32位整数)或类型0x12(64位整数).

如果在MongoDB shell中插入或更新文档,则NumberLong会创建一个64位整数,NumberInt会创建一个32位整数,而常规JavaScript编号会创建一个浮点值.这是因为JavaScript中没有整数,只有浮点数.

MongoDB shell中的输出显示浮点数和32位整数作为JavaScript数,而64位整数显示为对NumberLong的调用:

> db.inttest.insert({f: 1234, i: NumberInt("1234"), l: NumberLong("1234")})
> db.inttest.findOne()
{
        "_id" : ObjectId("5396fc0db8e0b3e2dedb59b0"),
        "f" : 1234,
        "i" : 1234,
        "l" : NumberLong(1234)
}
Run Code Online (Sandbox Code Playgroud)

不同的MongoDB驱动程序提供了插入不同类型数字的不同方法.例如,如果向BSONObjectBuilder附加"long long"值,则C++驱动程序会创建一个64位整数.

只要数字相等,查询就会匹配.在上面的示例中,查询

> db.inttest.find({i:1234})
> db.inttest.find({l:1234})
> db.inttest.find({f:1234})
> db.inttest.find({i:NumberLong("1234")})
> db.inttest.find({l:NumberLong("1234")})
> db.inttest.find({f:NumberLong("1234")})
Run Code Online (Sandbox Code Playgroud)

全部匹配插入的文档.