在6M文档集合中从字符串转换为float时的性能问题

时间:2012-11-13 15:19:52

标签: mongodb mongodb-query

我在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()表示我的两个字段已被编入索引。

2 个答案:

答案 0 :(得分:0)

如果你的目标是阻止服务器减速,那么我会在更新之间在客户端引入睡眠。您可以根据要减少的负载量以及对完成更新的耐心来调整超时。强制在mongo shell中进行睡眠调用“sleep(ms)”,其中“ms”是您想要睡眠的毫秒数。

答案 1 :(得分:0)

您是否尝试将4th argument of update设置为true,而不是使用forEach并为每个文档执行一个更新命令,以便您可以执行多文档更新?