我将一个 Long 值从 Java 写入 MongoDB,MongoDB 将其存储为 int64。 通过 RoboMongo 浏览数据,我可以看到以下值:
纳米时间戳:1467100788819818000
然后我在 JS 中获取值(使用 meteor ),最后得到以下对象:
对象 {_bsontype: "Long", low_: 932437528, high_: 341586032}
我如何在客户端使用这种类型?
最佳答案
这里的问题是JavaScript的数字类型是IEEE-754 double 二进制 float ,大约有15位小数精度。因此,尽管您可以从那个 BSON Long 中获取 JS 编号:
// May not be precise!
var num = l.high_ * Math.pow(2,32) + l.low_;
...它不会是完全相同的数字(在您的示例中,它会出现 1467100837142847000)。
如果它不精确(我们在这里谈论的是纳秒级)没关系,那么您已经准备就绪。
如果不是,并且您需要在 JavaScript 中处理这些,您可以考虑将它们记录为 string 而不是 Long:
nanoTimestamp: "1467100788819818000"
...然后使用可以对任意大整数或 float 进行运算的几个 JavaScript“大数”库之一。
关于javascript - MongoDB int64 和 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38078942/