javascript - MongoDB int64 和 JavaScript

标签 javascript java mongodb

我将一个 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/

相关文章:

javascript - 如何扩展 Ivan Sanchez 的 Leaflet.Polyline.SnakeAnim 以支持 'snakepause' 和 'snakeplay' 事件

javascript - 为什么 Javascript 的 Date(timestamp) 和 Python 的 datetime.fromtimestamp(timestamp) 不同?

java - Foursquare Java API v2 - checkin 示例

node.js - 找不到用户 : Could not find user nodejs@sDatabase

java - mongodb 2.6+中的批量操作可以用作缓冲区/队列吗?

asp.net - jQuery 和 Colorbox 的问题。动态 href 未反射(reflect)第一次出现后的变化

javascript - 获取两个数组之间变化的算法

Java sockets - 如何模拟多个客户端

java - Android Arraylist迭代根据是否存在设置或添加

重启服务器时出现 Mongodb 连接错误