【问题标题】:Behaviour of NumberLong in Mongo ShellMongo Shell 中 NumberLong 的行为
【发布时间】:2013-12-09 16:42:42
【问题描述】:

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

i) NumberLong(3)

ii) NumberLong(3)+NumberLong(4)

iii)typeof NumberLong(3)

iv)typeof (NumberLong(3)+NumberLong(4))

它们对应的输出是

i) NumberLong(3)

ii) 7

iii) object

iv)number

虽然第二个结果使第四个结果很明显,但我无法了解这种行为的头部或尾部。幕后发生了什么?我尝试在 MongoDB 文档中找到基本概念,但找不到太多。请帮忙!!

【问题讨论】:

    标签: mongodb mongo-shell


    【解决方案1】:

    Number 和 NumberLong 有什么区别?

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

    MongoDB 的BSON storage representation 具有比 JavaScript 更多的数字类型,包括 32 位有符号整数(4 字节)和 64 位有符号整数(8 字节)。

    NumberInt()NumberLong() 构造函数是 data types in the mongo shell,允许您创建整数值,而不是使用 JavaScript 的默认浮点数。这些是作为自定义原型实现的,因此 typeof 这些将是 object(而不是 number,它是 JavaScript 原始类型的一部分)。

    当您将 NumberLong()NumberInt() 值相加时,JavaScript 会将结果强制转换为原生 number 类型,这就是您在第 2 次和第 4 次测试中的结果与第 1 次和第 3 次测试不同的原因。

    为什么使用 NumberLong / NumberInt?

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

    NumberNumberLong 相比,32 位整数 (NumberInt) 可以用一半的字节表示。

    Number 相比,对于大整数值,64 位整数 (NumberLong) 具有更高的精度。由于指数的双精度浮点表示 reserves some bits,可以精确存储的最大 Number 是 253 而对于 @ 是 263-1 987654340@.

    【讨论】:

    • 啊啊啊啊……本来打算悬赏的……你来的正是时候,救了我……:)谢谢……
    猜你喜欢
    • 2017-08-19
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 2016-08-03
    相关资源
    最近更新 更多