我在mongodb中有一个> 6M文档集。其中一个字段(下面示例中的field1和field2)是字符串值(mongodb中的类型2)。
我的问题是我想将它们解析为浮点值(所有值都是 parseFloat-able )。我在SO中找到了这个片段。但它似乎不是一个处理6M文档集的好方法。
db.collection.find({field1: {$type:1}}).forEach(function(data) {
db.collection.update(
{_id:data._id},
{$set:{
field1: parseFloat(data.field1),
field2: parseFloat(data.field2)}
}
)
})
有没有办法可以转换我的两个字段而不会降低服务器速度?
使用db.collection.getIndexes()和db.collection.getIndexKeys()表示我的两个字段已被编入索引。
答案 0 :(得分:0)
如果你的目标是阻止服务器减速,那么我会在更新之间在客户端引入睡眠。您可以根据要减少的负载量以及对完成更新的耐心来调整超时。强制在mongo shell中进行睡眠调用“sleep(ms)”,其中“ms”是您想要睡眠的毫秒数。
答案 1 :(得分:0)
您是否尝试将4th argument of update设置为true,而不是使用forEach并为每个文档执行一个更新命令,以便您可以执行多文档更新?