Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 在6M文档集合中从字符串转换为浮点时的性能问题_Mongodb_Mongodb Query - Fatal编程技术网

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

Mongodb 在6M文档集合中从字符串转换为浮点时的性能问题,mongodb,mongodb-query,Mongodb,Mongodb Query,我在mongodb收集了超过600万份文档。其中一个字段(以下示例中的字段1和字段2)是字符串值(mongodb中的类型2) 我的问题是我想把它们解析成浮点值(所有的值都是可以解析的)。我在某处发现了这个片段。但这似乎不是处理600万文档集的好办法 db.collection.find({field1: {$type:1}}).forEach(function(data) { db.collection.update( {_id:data._id},

我在mongodb收集了超过600万份文档。其中一个字段(以下示例中的字段1和字段2)是字符串值(mongodb中的类型2)

我的问题是我想把它们解析成浮点值(所有的值都是可以解析的)。我在某处发现了这个片段。但这似乎不是处理600万文档集的好办法

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()表示我的两个字段都被索引了。

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

您是否尝试将设置为true以执行多文档更新,而不是使用forEach并对每个文档执行一个更新命令?

您正在尝试执行6M更新。无论您是在循环中进行此操作,还是使用任何花哨的更新构造,它仍然是一次性更新。编写一个迁移过程,该过程将一次获取一系列值并进行更新。您是否建议执行类似于跳过(x)、限制(y)的操作?然后再重复一遍?是的,但是请注意,如果您继续添加文档,跳过和限制可能会不准确,并且在列表末尾排序可能会耗费大量资源。您可以向每个文档添加新的索引标志,如“processed”,并在最后一次性将其删除。您建议使用多少毫秒来避免服务器速度减慢?我想测试一下,mongo shellWell中似乎既没有setTimeout也没有setInterval。睡眠函数简单地称为SleepThank,为了正确的睡眠方法学,我已经更正了上面的答案。至于毫秒数,没有硬性规定。这实际上是负载减少与此操作的运行时间之间的折衷。我的建议是根据您愿意等待此操作完成的时间长度来制定睡眠值。一旦你让它在文档子集上运行一个测试,看看产生的负载是否为你所接受。好吧,我使用了一个游标,让脚本在每次迭代中休眠25毫秒(我可以根据需要降低或提高这个数字)。现在似乎还可以。我需要获取字段值,然后解析它。因此,每个文档都有不同的值(显然)。