因为我想用 500k 条目更新整个文档集合(有些可能存在,有些不存在),我遍历我的文档(它们是来自 CSV 的普通 JS 对象)并通过 findOneAndUpdate
方法更新我的所有文档.
这是一个简化的 JS 代码:
const mongoose = require("mongoose");
const { mongoUrl } = require("../config.js");
const MyModel = require("../models/MyModel");
async function run() {
mongoose.set("useCreateIndex", true);
await mongoose.connect(mongoUrl, { useNewUrlParser: true });
const r = [/* */]; // <-- Something with 500k objects
const total = r.length;
for (let i in r) {
const e = r[i];
e.REF = e.REF.trim();
await MyModel.findOneAndUpdate({ REF: e.REF }, e, { upsert: true, new: true });
if (i % 500 === 0) {
console.log((i / total) * 100 + "%");
}
}
}
run();
第一次插入很快(每秒超过 500 个),但当达到 25% 时,它开始变得非常慢(500 个条目需要 10 秒或更长时间)。我认为它会慢一些(卡住?)接近 80%。
有没有更好的方法来做这样的事情?我怎样才能加快速度?
我的意思是,它只有 500k 个整体(有很多属性,但我认为这不重要)。
最佳答案
发表评论作为回答:
你有an index on REF
吗?否则,数据库将不得不扫描整个集合,以确定是否存在具有相同 REF
的模型。
关于javascript - Mongoose :findOneAndUpdate ~500k 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54998685/