【发布时间】:2017-11-06 20:24:37
【问题描述】:
我想复制一个 MongoDB 集合中的 7,000,000 个文档(每个文档可能 1-2 KB BSON),修改一个字段。该字段是一个带有数值的字符串,我想将该字段增加1。
按照 this approach 从 Mongo shell,我采取了以下方法:
> var all = db.my_collection.find()
> all.forEach(function(it) {
... it._id = 0; // to force mongo to create a new objectId
... it.field = (parseInt(it.field) + 1).toString();
... db.my_collection.insert(it);
... })
执行以下代码需要很长时间;起初我以为代码以某种方式被破坏了,但是我在一个单独的终端上检查了大约一个小时后的集合状态,发现该过程仍在运行,现在有 7,000,001 个文档!我查了一下,果然有 1 个新文档与增加的字段相匹配。
就上下文而言,我正在运行具有 4 个内核和 16 GB 内存的 2015 MBP。我看到mongo 接近我的 CPU 开销的顶部,平均约为 85%。
1) 我是否缺少 Mongodb 中的批量修改/更新功能?
2) 为什么上述操作可以正常工作,但工作速度太慢以至于它以 1/hr 的速度更新文档?
【问题讨论】:
标签: mongodb mongo-shell