节点 | MongoDB |如何减慢插入速度?

NodeJS | MongoDB | How do I slow down my inserts?

我有一个长度为 8,000 项的数组,我正在我的 MongoDB Atlas 数据库中创建一个新文档,但我一直达到每秒 100 次操作的限制。我不需要数据以闪电般的速度进入那里(每秒 75 次插入对我来说很好),所以我尝试在写入函数的中间插入一个睡眠函数,但它没有按我预期的那样运行。

我期望和希望我的代码做什么:

  1. 写第一个文档
  2. 睡眠 20 毫秒
  3. 写第二个文档

现在好像在做什么:

  1. 写第一个文档
  2. 马上写第二个文件
  3. 马上写第三个文件

代码示例如下:

const Sleep = ms => new Promise(res => setTimeout(res, ms));

const MyFunction = array => {
  return Promise.all(array.map(row => {
    const item = new Item({
      "property1": row.property1,
      "property2": row.property2
    });
    Sleep(20) // tried putting a sleep here but that didn't work
    return item.save();
  }));
};

您需要等待您的睡眠方法,因为它是异步的。但即便如此,它也不会起作用,因为它只会延迟承诺的创建,而不是执行。

更好用batch-promiseshttps://www.npmjs.com/package/batch-promises

const batch = require("batch-promises");

const MyFunction = async array => {
  return batch(100, array, row => {
    const item = new Item({
      "property1": row.property1,
      "property2": row.property2
    });
    return item.save();
  });
};

或者如果您想按顺序进行

const MyFunction = async array => {
  for (const row of array) {
    const item = new Item({
      "property1": row.property1,
      "property2": row.property2
    });
    await item.save();
  }
};