我正在尝试使用insertMany方法,但没有成功......我读了这个stackoverflow answer,但它没有说明如何处理非常大的对象数组。
在我的测试用例中,我有9755个对象,使用这个脚本它会导入所有行9次,这不是我想要的...
我希望每次导入时将数组分成1000个对象。
我该怎么做?
function bulkImportToMongo(arrayToImport, mongooseModel) {
const Model = require(`../../../models/${mongooseModel}`);
let counter = 0;
let temp = [];
arrayToImport.forEach(item => {
temp.push(item);
counter++;
if (counter % 1000 == 0) {
Model.insertMany(temp).then(mongoosedocs => {
console.log(`imported ${counter} objects`);
console.log(mongoosedocs.length);
temp = [];
});
}
});
}
答案 0 :(得分:1)
您需要创建一个批次数组(每个批次不超过100个元素)。对于每个批次调用Model.insertMany
。要等到所有文件都已插入,您Promise.all
:
function bulkImportToMongo(arrayToImport, mongooseModel) {
const Model = require(`../../../models/${mongooseModel}`);
const batchSize = 100;
let batchCount = Math.ceil(arrayToImport.length / batchSize);
let recordsLeft = arrayToImport.length;
let ops = [];
let counter = 0;
for (let i = 0; i < batchCount; i++) {
let batch = arrayToImport.slice(counter, counter + batchSize);
counter += batchSize;
ops.push(Model.insertMany(batch));
}
return Promise.all(ops);
}