我一直在努力解决我对实际编程的有限知识,需要一些帮助......
从 node.js 中并保存到 MongoDB 中(使用本机驱动程序),我需要索引和搜索一些长数字。
一个例子:
87 / 53
在 64 位 Windows 计算器上,这是:
1.6415094339622641509433962264151
我在 node.js 中运行它:
var answer = 87 / 53;
console.log(answer);
我得到:
1.6415094339622642
我的理解是因为 node.js 只运行 32 位,我们没有得到所需的精度。
因此,我插入了node-bigint库,该库包装了 libgmp 以使用字符串进行大数数学运算......
现在它是:
var bigint = require('bigint');
var top = bigint('8700000000000000000000000000000000000');
var bottom = bigint(53);
var answer = top.div(bottom);
console.log(answer.toString());
我用零填充以删除浮点(更容易 - 我只需要比较数字,即大于小于)...
此代码产生:
'164150943396226415094339622641509433'
太好了 - 我比 windows 计算器更准确:)
问题是,这个数字目前是一个字符串 - 我将字符串保存到 Mongo 并执行如下查询:
{thenumber:{'$gt':'164150943396226415094339622641509433'}}
即我正在将字符串与字符串进行比较。这可以正常工作,因为我已经将它们全部填充了。
问题是 - 这是存储和搜索值的最佳方式(即字符串)还是将它们转换为 64 位 Long 的索引和搜索速度更快......
如果答案是“使用 Longs 他们更快”,我一生都无法(经过大量谷歌搜索)弄清楚如何将上面的字符串转换为原生Mongo Long数据类型(具有低位和高位) - 请帮助一个超出他深度的程序员:)
跟进:
为驱动程序阅读Long DataType手册,它具有此方法:
Long.fromBits(lowBits, highBits)
如此有针对性的问题 - 我如何将表示 64 位整数的字符串转换为这些低位和高位以便 Long 保存......另外 - 这比字符串搜索更快吗?