2017-06-15 42 views
2

我試圖在Mongodb3.4中運行一些Javascript NumberDecimal測試,但是輸出永遠不會正確,如果我改用NumberInt,那麼結果是正確的。 JavaScript不支持NumberDecimal類型嗎?如何在JavaScript Mongodb中新增NumberDecimal()?

以下是我的測試腳本:

var X=new NumberDecimal("100"); 
    var Y=new NumberDecimal("100"); 
    var RTNEqual=(X.valueOf()==Y.valueOf()); 
    var RTNPlus=X+Y; 
    print("Equal=>" + RTNEqual + " RTNPlus=>" + RTNPlus) 

    Output: 
    Equal=>false RTNPlus=>NumberDecimal("100")NumberDecimal("100") 

謝謝〜

+0

什麼是你真正想幹什麼?你打算在mongo中插入數字小數還是試圖以數字小數形式獲取它? – Jeet

+0

嗨,我想加上兩個值都是以NumberDecimal的形式,這裏是例子: L1:{「X」:NumberDecimal(「1234.01」)} L2:{「Y」:NumberDecimal( 「5678.02」)} 如何編寫腳本以加X和Y. 謝謝。 –

+0

你在哪裏試圖添加這些值?在mongo shell或節點程序中? – Jeet

回答

2

mongo殼(截至3.4.5)不支持算術與NumberDecimal值。十進制類型不是JavaScript本地的,因此shell中的十進制值是表示存儲在MongoDB中的BSON值的字符串。

按照討論中的MongoDB的問題跟蹤SERVER-19676

由於固有的JavaScript做非浮點運算的根本問題,沒有任何簡單的系統掛接到提供算術支持我們的類型。如果/當javascript提供運算符重載,或者看起來更活躍的值類型時,我們可能會重新討論這個問題。與此同時,我們不打算通過方法重新實現算術。

然而,十進制數值完全如果您通過聚合框架在服務器上操作的支持:

var X=new NumberDecimal("100"); 
var Y=new NumberDecimal("100"); 

db.omnum.aggregate(
    { $project: { 
     _id: 0, 
     RTNEqual: { $eq: [X, Y] }, 
     RTNPlus: { $sum: [X, Y] } 
    }} 
) 

輸出:

{ 
    "result": [ 
    { 
     "RTNEqual": true, 
     "RTNPlus": NumberDecimal("200") 
    } 
    ], 
    "ok": 1 
}