当我有一个大的对象数组时,如何将insertMany与Mongoose一起使用?
我正在尝试使用insertMany方法,但没有成功。。。我读过这个stackoverflow,但它没有告诉我们如何处理非常大的对象数组 在我的测试用例中,我有9755个对象,用这个脚本它导入所有行9次,这不是我想要的 我想为每次导入将数组分成1000个对象的块 我该怎么做当我有一个大的对象数组时,如何将insertMany与Mongoose一起使用?,mongoose,promise,Mongoose,Promise,我正在尝试使用insertMany方法,但没有成功。。。我读过这个stackoverflow,但它没有告诉我们如何处理非常大的对象数组 在我的测试用例中,我有9755个对象,用这个脚本它导入所有行9次,这不是我想要的 我想为每次导入将数组分成1000个对象的块 我该怎么做 function bulkImportToMongo(arrayToImport, mongooseModel) { const Model = require(`../../../models/${mongooseMod
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 = [];
});
}
});
}
您需要创建一个批数组(每个批不超过100个元素)。对于每个批处理调用
Model.insertMany
。要等待所有文档插入完毕,您必须承诺。所有:
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);
}
函数bulkImportToMongo(arrayToImport,mongooseModel){
const Model=require(`../../../models/${mongooseModel}`);
常数batchSize=100;
让batchCount=Math.ceil(arrayToImport.length/batchSize);
让recordsLeft=arrayToImport.length;
让ops=[];
设计数器=0;
for(设i=0;i
未处理的拒绝SYNTAX错误:已声明标识符“batch”。我应该删除“let batch=”?不,我已经修复了示例。谢谢!还是不为我工作-(.如果你有时间看一下,这里是完整的代码。.不幸的是,我无法修复你代码中的所有错误,你问了关于具体问题的问题,我已经给出了答案。在你的代码示例中发现了一个问题,请在Math.ceil
中修复batchSize
,而不是1000,使用100。