Mongo Shell中NumberLong的行为

alp*_*uri 2 mongodb mongo-shell

我在Mongo Shell中写了以下4个语句

一世) NumberLong(3)

II) NumberLong(3)+NumberLong(4)

三) typeof NumberLong(3)

IV) typeof (NumberLong(3)+NumberLong(4))

和他们相应的产出是

一世) NumberLong(3)

II) 7

三) object

IV) number

虽然第二个结果使第四个结果显而易见,但我无法找到这个行为的头部或尾部.幕后发生了什么?我尝试在MongoDB文档中找到基础概念,但找不到多少.请帮忙!!

Ste*_*nie 7

Number和NumberLong有什么区别?

JavaScript目前只有一个数字类型,即Number,表示为IEEE 754双精度浮点值(8字节).

MongoDB的BSON存储表示具有比JavaScript更多的数字类型,包括32位有符号整数(4字节)和64位有符号整数(8字节).

NumberInt()NumberLong()构造函数在数据类型mongo外壳,让您创建整数值,而不是使用JavaScript的默认浮点数.这些是作为自定义原型实现的,因此typeof这些将是object(而不是numberJavaScript原始类型的一部分).

当您一起添加NumberLong()NumberInt()值时,JavaScript会将结果强制转换为本机number类型,这就是您在第2和第4个测试中的结果与第1和第3个测试不同的原因.

为什么要使用NumberLong/NumberInt?

这些类型用于为MongoDB的底层BSON存储格式提供接口.

NumberInt与a Number或相比,32位整数()可以用字节的一半表示NumberLong.

NumberLong与a相比,64位整数()对于大整数值具有更高的精度Number.由于双精度浮点表示为指数保留了一些位Number,因此可以精确存储的最大是2 53而不是2 63 -1 NumberLong.