我有一个有900万条记录的集合。我目前正在使用以下脚本来更新整个集合:
simple_update.js
db.mydata.find().forEach(function(data) {
db.mydata.update({_id:data._id},{$set:{pid:(2571 - data.Y + (data.X * 2572))}});
});
这是从命令行运行,如下所示:
mongo my_test simple_update.js
所以我所做的就是根据简单的计算添加一个新的字段pid。
有更快的方法吗?这需要很长时间。
发布于 2018-12-10 13:52:52
你可以做两件事。
该链接还包含以下建议:
这是执行批量管理工作的好方法。在服务器上运行mongo,通过localhost接口连接。然后连接非常快且延迟低。这比db.eval()更友好,因为db.eval()会阻止其他操作。
这可能是你得到的最快的。您必须意识到在单个服务器上发布9M更新将是一项繁重的操作。假设您可以获得3k更新/秒,您仍然在谈论运行近一个小时。
这不是一个“mongo问题”,这将是一个硬件限制。
发布于 2018-12-10 15:04:31
我使用的是:db.collection.update方法
// db.collection.update( criteria, objNew, upsert, multi ) // --> for reference
db.collection.update( { "_id" : { $exists : true } }, objNew, upsert, true);
https://stackoverflow.com/questions/-100008930
复制相似问题