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