1

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

4

2 回答 2

0

您是否尝试过将update 的第四个参数设置为 true 以便执行多文档更新,而不是使用 forEach 并为每个文档执行一个更新命令?

于 2012-11-14T22:14:28.207 回答
0

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

于 2012-11-13T15:42:51.243 回答