Numberlong(x)和Numberlong(“x”)之间的区别

时间:2015-01-20 20:26:11

标签: mongodb

我在MongoDB数据库中存储了一些XML数据。部分数据存储为Numberlong(1234),其他数据存储为Numberlong("12353")。例如:

"nodes_id" : [
    NumberLong(13879272),
    NumberLong(252524625),
    NumberLong(252524611),
    NumberLong(252524630),
    NumberLong(149809404),
    NumberLong(605181143),
    NumberLong("3068489546"),
    NumberLong("3059300418"),
    NumberLong(253351454),
    NumberLong(253351438),
    NumberLong(253348623),
    NumberLong(253351472)
]

这两种类型有什么区别吗?

1 个答案:

答案 0 :(得分:1)

NumberLong(253351454)仅适用于小到足以让它们不需要的数字......好吧,长:shell必须以某种方式在JS中表示它们,所以它只能代表数字

对于较大的数字,需要文本表示,因为没有足够大的数据类型可用,因此NumberLong("3059300418")带有3059300418 > 253351454

换句话说,不,没有区别。这只是shell的限制,或者更一般地说,是JS和浮点数的限制。

警告:不要尝试使用太大的数字来调用构造函数,即不要尝试db.foo.insert({"t" : NumberLong(1234657890132456789)});由于该数字对于double来说太大,因此会导致舍入错误。上面的数字会转换为NumberLong("1234657890132456704"),这显然是错误的。