当我有一个大的对象数组时,如何将insertMany与Mongoose一起使用?

当我有一个大的对象数组时,如何将insertMany与Mongoose一起使用?,mongoose,promise,Mongoose,Promise,我正在尝试使用insertMany方法,但没有成功。。。我读过这个stackoverflow,但它没有告诉我们如何处理非常大的对象数组 在我的测试用例中,我有9755个对象,用这个脚本它导入所有行9次,这不是我想要的 我想为每次导入将数组分成1000个对象的块 我该怎么做 function bulkImportToMongo(arrayToImport, mongooseModel) { const Model = require(`../../../models/${mongooseMod

我正在尝试使用insertMany方法,但没有成功。。。我读过这个stackoverflow,但它没有告诉我们如何处理非常大的对象数组

在我的测试用例中,我有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 = [];
      });
    }
  });
}

您需要创建一个批数组(每个批不超过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。