Mongodb将字符串解析为Decimal / float

时间:2015-01-09 13:23:29

标签: javascript mongodb mongodb-query

我是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;
})

提前致谢。

2 个答案:

答案 0 :(得分:4)

你做错了。首先转换,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 );

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

答案 1 :(得分:0)

我有一个类似的问题,我们没有正确启用十进制序列化,因此我想更新已在我们数据库中的文档以使用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将字符串转换为小数。