javascript - MongoDB - 更新集合中所有记录的最快方法是什么?

我有一个包含 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

有没有更快的方法?这需要大量时间。

最佳答案

您可以做两件事。

  1. 发送将“multi”标志设置为 true 的更新。
  2. 将函数存储在服务器端并尝试使用server-side code execution .

该链接还包含以下建议:

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/

相关文章:

mongodb - 相当于 MongoDB 的 ERD?

c# - 如何使用 MongoDB 的 C# 驱动程序指定 Order 或 Sort?

node.js - Mongoose 密码哈希

mongodb - 尝试连接到 mongodb 服务器时无法识别 mongo 命令

mongodb - 只安装 mongo shell,不安装 mongodb

javascript - 在 Meteor 应用程序中实现 MongoDB 2.4 的全文搜索

c# - 使用官方 C# 驱动程序在 Mongo DB 中进行更新插入

mongodb - 自动重新连接异常 "master has changed"

mongodb - 插入后如何在 PyMongo 中获取对象 ID?

mongodb - 如何从 MongoDB 中删除 system.profile 集合?