我有一个包含 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。
有没有更快的方法?这需要大量时间。
最佳答案
您可以做两件事。
该链接还包含以下建议:
This is a good technique for performing batch administrative work. Run mongo on the server, connecting via the localhost interface. The connection is then very fast and low latency. This is friendlier than db.eval() as db.eval() blocks other operations.
这可能是您最快的。您必须意识到在单个服务器上发布 9M 更新将是一项繁重的操作。假设您每秒可以获得 3k 次更新,您仍然在谈论运行近一个小时。
这并不是真正的“mongo 问题”,而是硬件限制。
https://stackoverflow.com/questions/4146452/