gpt4 book ai didi

javascript - 如何在 JavaScript Mongodb 中新建一个 NumberDecimal()?

转载 作者:可可西里 更新时间:2023-11-01 09:34:00 28 4
gpt4 key购买 nike

我尝试在 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 值的算术。 decimal 类型不是 JavaScript 原生的,因此 shell 中的 decimal 值是表示存储在 MongoDB 中的 BSON 值的字符串。

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

Due to the fundamental problems inherent to doing non-floating point math in javascript, there isn't any easy system to hook into to provide arithmetic support for our types. If/when javascript provides operator overloading, or something that looks more live value types, we may revisit the issue. In the meantime, we aren't planning on re-implementing arithmetic via methods.

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

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
}

关于javascript - 如何在 JavaScript Mongodb 中新建一个 NumberDecimal()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44565545/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com