我尝试在Mongodb3.4中运行一些Javascript NumberDecimal测试,但是输出永远都不正确,如果我改用NumberInt,那么结果是正确的。 Javascript不支持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")

谢谢〜

最佳答案

mongo shell 程序(从3.4.5开始)不支持NumberDecimal值的算术运算。十进制类型不是JavaScript固有的,因此 shell 中的十进制值是表示存储在MongoDB中的BSON值的字符串。

根据在MongoDB问题跟踪器中对SERVER-19676的讨论:



但是,如果您通过聚合框架在服务器上进行操作,则完全支持十进制值:

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
}

09-10 17:47