Mongodb 将字符串解析为 Decimal/float
Mongodb parse string to Decimal/float
我是 mongoDB 的新手。我将数据作为字符串获取,但我想将其解析为 decimal/ float
。
我发现制作了这段代码,但它似乎不起作用。这是我的代码,它将 - 替换为 00,* 替换为“”,并将其解析为浮点数。它没有错误,但 parseFloat(doc).toFixed(2)
。
db.behuizingen.find().forEach(function(doc)
{
var price = doc.Prijs.replace('€', ''); // it may be vary for your other document
price = price.replace('-', '00');
price = price.replace('*', '');
doc.Prijs = Number(price);
parseFloat(doc).toFixed(2)
db.behuizingen.update({_id : doc._id} , doc;
})
提前致谢。
你做错了。先转换,shell 的Number()
函数与它无关。因此,将该行替换为继续:
doc.Prijs = parseFloat(parseFloat(price).toFixed(2));
db.moederborden.update({_id : doc._id} , doc );
但也要小心。在第二个参数存在的地方使用 .update()
将 "replace" 整个文档包含 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 );
它使用 $set
运算符,因此在写入数据库时不会覆盖 doc
对象中未引用的任何现有值。
我有一个类似的问题,我们没有正确启用十进制序列化,所以我想更新数据库中已有的文档以使用 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
将字符串转换为小数。
我是 mongoDB 的新手。我将数据作为字符串获取,但我想将其解析为 decimal/ float
。
我发现制作了这段代码,但它似乎不起作用。这是我的代码,它将 - 替换为 00,* 替换为“”,并将其解析为浮点数。它没有错误,但 parseFloat(doc).toFixed(2)
。
db.behuizingen.find().forEach(function(doc)
{
var price = doc.Prijs.replace('€', ''); // it may be vary for your other document
price = price.replace('-', '00');
price = price.replace('*', '');
doc.Prijs = Number(price);
parseFloat(doc).toFixed(2)
db.behuizingen.update({_id : doc._id} , doc;
})
提前致谢。
你做错了。先转换,shell 的Number()
函数与它无关。因此,将该行替换为继续:
doc.Prijs = parseFloat(parseFloat(price).toFixed(2));
db.moederborden.update({_id : doc._id} , doc );
但也要小心。在第二个参数存在的地方使用 .update()
将 "replace" 整个文档包含 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 );
它使用 $set
运算符,因此在写入数据库时不会覆盖 doc
对象中未引用的任何现有值。
我有一个类似的问题,我们没有正确启用十进制序列化,所以我想更新数据库中已有的文档以使用 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
将字符串转换为小数。