2012-08-15 30 views
0

我一直在冥思苦想,我有限的真正的編程知識,需要一些幫助......node.js中節省大量的浮點數到蒙戈搜索

從node.js的範圍內,並保存到MongoDB的(使用native driver)我需要索引和搜索一些長數字。

一個例子:

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計算器更準確:)

問題是,這個數字是目前一個字符串 - 我節省了字符串蒙戈和做一個查詢,如:

{thenumber:{'$gt':'164150943396226415094339622641509433'}} 

Ie我正在比較字符串和字符串。這工作正常,因爲我填充他們都一樣。

的問題是 - 這是存儲和搜索值或將它們轉換爲64位長的最好的方式(即字符串)更快的索引和搜索......

如果答案是「使用多頭他們更快'我不能爲我的生活(大量谷歌搜索後)找出如何將上面的字符串轉換爲本地Mongo Long數據類型(低位和高位) - 請幫助他的深度程序員:)

追問:

閱讀Long DataType手冊司機我T有這個方法:

Long.fromBits(lowBits, highBits) 

所以有針對性的問題 - 如何把一個代表64位整數到這些低和高比特龍救...也是一個字符串 - 這是更快地搜索比一個字符串?

+0

這聽起來像你在爲我做「真正的編程」:) – benekastah 2012-08-15 17:26:09

回答

3

使用Long.fromString將字符串轉換成MongoDB中長:

var Long = require('mongodb').Long; 
var long = Long.fromString(str, 10); 

第二個編輯 - 其實,這是包含符號的64位整數的字符串正確的答案。問題是您的字符串'164150943396226415094339622641509433'太大,無法存儲爲64位有符號整數。你可以使用的最大值是(2^63 - 1)或9223372036854775807.

+0

嘿約翰尼 - 謝謝你 - 我想它想要給高位和低位(這對於32位節點驅動程序是有意義的)... 我只是不知道如何從字符串中提取這些高位和低位... – 2012-08-15 17:34:02

+0

ahhhhh - 好的是,這個盲目地明顯!謝謝我沒有停下足夠長的時間,認爲它可能對64位來說太大了...對,我將不得不將它分開...... – 2012-08-15 23:56:31