【发布时间】:2017-01-31 00:36:08
【问题描述】:
我有一个包含数百万个文档的集合,类似于以下内容:
{
_id: ObjectId('...'),
value: "0.53"
combo: [
{
h: 0,
v: "0.42"
},
{
h: 1,
v: "1.32"
}
]
}
问题是值存储为字符串,我需要将它们转换为浮点数/双精度值。
我正在尝试这个并且它正在工作,但考虑到数据量,这需要几天才能完成:
db.collection.find({}).forEach(function(obj) {
if (typeof(obj.value) === "string") {
obj.value = parseFloat(obj.value);
db.collection.save(obj);
}
obj.combo.forEach(function(hv){
if (typeof(hv.value) === "string") {
hv.value = parseFloat(hv.value);
db.collection.save(obj);
}
});
});
我在阅读 Mongo 文档时遇到了批量更新,我正在尝试这个:
var bulk = db.collection.initializeUnorderedBulkOp();
bulk.find({}).update(
{
$set: {
"value": parseFloat("value"),
}
});
bulk.execute();
这运行...但我得到一个 NAN 作为值,这是因为它认为我正在尝试将“值”转换为浮点数。我尝试了不同的变体,如this.value 和"$value",但无济于事。另外,这种方法只尝试更正另一个对象中的值,而不是数组中的值。
如果有任何帮助,我将不胜感激。提前致谢!
【问题讨论】:
标签: mongodb mongo-shell