Number 和 NumberLong 有什么区别?
JavaScript 目前只有一个数字类型Number,表示为 IEEE 754 双精度浮点值(8 个字节)。
MongoDB 的BSON 存储表示具有比 JavaScript 更多的数字类型,包括 32 位有符号整数(4 字节)和 64 位有符号整数(8 字节)。
NumberInt()
和NumberLong()
构造函数是shell中的数据类型mongo
,允许您创建整数值而不是使用 JavaScript 的默认浮点数。这些是作为自定义原型实现的,因此typeof
它们将是object
(而不是number
JavaScript 原始类型的一部分)。
当您将NumberLong()
或NumberInt()
值加在一起时,JavaScript 会将结果强制转换为本机number
类型,这就是为什么您在第 2 次和第 4 次测试中的结果与第 1 次和第 3 次测试中的结果不同的原因。
为什么使用 NumberLong / NumberInt?
这些类型用于为 MongoDB 的底层 BSON 存储格式提供接口。
与 a或相比, 32 位整数 ( NumberInt
) 可以用一半的字节表示。Number
NumberLong
与 a 相比, 64 位整数 ( NumberLong
) 对于大整数值具有更高的精度Number
。由于双精度浮点表示为指数保留了一些位Number
,因此可以精确存储的最大值为 2 53而对于 a则为 2 63 -1 NumberLong
。