MongoDB int64和JavaScript

时间:2016-06-28 14:25:57

标签: javascript java mongodb

我从Java写一个Long值到MongoDB,它将它存储为int64。 通过RoboMongo浏览数据我可以看到以下值:

nanoTimestamp: 1467100788819818000

然后我获取JS中的值(使用meteor),最后得到以下对象:

Object {_bsontype: "Long", low_: 932437528, high_: 341586032}

如何在客户端使用此类型?

1 个答案:

答案 0 :(得分:0)

这里的问题是JavaScript的数字类型是IEEE-754双精度二进制浮点,它具有大约15位十进制精度。所以虽然你可以从BSON Long获得一个JS号码:

// May not be precise!
var num = l.high_ * Math.pow(2,32) + l.low_;

...它不会是完全相同的数字(在你的例子中,它会出来1467100837142847000)。

如果它是不精确的(我们在这里谈论的是纳秒),那么你已经完成了。

如果没有,并且您需要在JavaScript中处理这些问题,您可以考虑将它们记录为字符串而不是Long:

nanoTimestamp: "1467100788819818000"

...然后使用几个JavaScript“大数”库中的一个,可以对任意大整数或浮点数进行操作。