Javascript Mongodb将字符串解析为十进制/浮点

Javascript Mongodb将字符串解析为十进制/浮点,javascript,mongodb,mongodb-query,Javascript,Mongodb,Mongodb Query,我是mongoDB的新手。我将数据作为字符串获取,但我想将其解析为十进制/浮点。 我发现我写了这个代码,但它似乎不起作用。这是我的代码,它替换了-代表00,*代表“”,并将其解析为浮点。它没有给出错误,但是parseFloat(doc).toFixed(2) 提前谢谢。你做错了。首先转换,shell的Number()函数与此无关。因此,将该行替换为继续: doc.Prijs = parseFloat(parseFloat(price).toFixed(2)); db.moederborden.u

我是mongoDB的新手。我将数据作为字符串获取,但我想将其解析为
十进制/浮点
。 我发现我写了这个代码,但它似乎不起作用。这是我的代码,它替换了-代表00,*代表“”,并将其解析为浮点。它没有给出错误,但是
parseFloat(doc).toFixed(2)


提前谢谢。

你做错了。首先转换,shell的
Number()
函数与此无关。因此,将该行替换为继续:

doc.Prijs = parseFloat(parseFloat(price).toFixed(2));
db.moederborden.update({_id : doc._id} , doc );
但也要当心。在第二个参数存在的地方使用
.update()
将用
doc
的内容“替换”整个文档

您可能希望这样做:

doc.Prijs = parseFloat(parseFloat(price).toFixed(2));
var update = { "$set": {} };

Object.keys(doc).each(function(key) {
    update["$set"][key] = doc[key];
});

db.moederborden.update({_id : doc._id} , update );

它使用运算符,以便在写入数据库时不会覆盖
doc
对象中未引用的任何现有值。

您做错了。首先转换,shell的
Number()
函数与此无关。因此,将该行替换为继续:

doc.Prijs = parseFloat(parseFloat(price).toFixed(2));
db.moederborden.update({_id : doc._id} , doc );
但也要当心。在第二个参数存在的地方使用
.update()
将用
doc
的内容“替换”整个文档

您可能希望这样做:

doc.Prijs = parseFloat(parseFloat(price).toFixed(2));
var update = { "$set": {} };

Object.keys(doc).each(function(key) {
    update["$set"][key] = doc[key];
});

db.moederborden.update({_id : doc._id} , update );

它使用运算符,这样,在写入数据库时,
doc
对象中未引用的任何现有值都不会被覆盖。

我遇到了一个类似的问题,我们没有正确启用十进制序列化,因此我想更新数据库中已经存在的文档,以使用
十进制
类型,而不是
字符串
。我使用了以下脚本:

db.MyCollection.find({ Price: { $type: "string" } }).forEach(function(doc) { 
    print('Updating price for ' + doc._id);
    db.MyCollection.update( 
       { _id: doc._id },
       { $set : { Price: NumberDecimal(doc.Price) } }
    )
})

这仅通过筛选字段类型来检索需要更新的文档,然后使用
NumberDecimal
将字符串转换为十进制。

我遇到了一个类似的问题,我们没有正确启用十进制序列化,因此我想更新数据库中已有的文档,使用
decimal
类型,而不是
string
。我使用了以下脚本:

db.MyCollection.find({ Price: { $type: "string" } }).forEach(function(doc) { 
    print('Updating price for ' + doc._id);
    db.MyCollection.update( 
       { _id: doc._id },
       { $set : { Price: NumberDecimal(doc.Price) } }
    )
})

这仅通过过滤字段类型来检索需要更新的文档,然后使用
NumberDecimal
将字符串转换为十进制。

谢谢您的回答。现在它将
更改为
。类型仍然表示它是一个字符串。“我该怎么解决这个问题呢?”亨克腾克:对不起,我打错了,不是吗。它应该被包装两次
parseFloat()
从字符串发出数值,
.toFixed()
发出字符串。如图所示,再次将所有这些内容包装在
parseFloat()
中。感谢您的回答。现在它将
更改为
。类型仍然表示它是一个字符串。“我该怎么解决这个问题呢?”亨克腾克:对不起,我打错了,不是吗。它应该被包装两次
parseFloat()
从字符串发出数值,
.toFixed()
发出字符串。因此,如图所示,再次将所有这些内容包装到
parseFloat()
中。我使用的是v3.2,使用parseFloat和parseInt似乎是更改字段数据类型的唯一方法。@我认为它实际上是在v3.4()中引入的,因此仍然比您的版本晚,但早于MongoDB v4.0中引入的v4.0NumberDecimal。我使用的是v3.2,使用parseFloat和parseInt似乎是更改字段数据类型的唯一方法。@我认为它实际上是在v3.4()中引入的,因此仍然比您的版本晚,但比v4.0早