【问题标题】:How to insert multiple items items at the same time into a MongoDB collection?如何将多个项目同时插入到 MongoDB 集合中?
【发布时间】:2019-04-13 05:53:42
【问题描述】:

我有一个 12K 模型的集合,我想插入到我的 Mongo DB 中。

Mongo 数据库版本:4.0.3 猫鼬版本:5.3.4

我尝试在 forEach 中使用 InsertMany、create、save(),但我无法插入 12K 模型。

const ProductSchema = new mongoose.Schema({
  name: {
    type: String,
    required: true
  },
  id: {
    type: String,
    required: true
  },
  sku: {
    type: String,
    required: true
  },
  categoriesIds: [
    {
      type: String
    }
  ]},
  {
    usePushEach: true, timestamps: true
  });

 const prodModel = new ProductModel({
              name: prod.name,
              id: prod.id,
              sku: prod.sku,
              categoriesIds: prod.categories
            });

I have array of 12K productModel created and then I did:


ProductModel.insertMany(products, (error) => {

});

只有当数组长度小于 1K 时才可以。我从 Mongo 3.6 开始读到 maxWriteBatchSize 是 100K。我正在使用 Mongo 4。我不明白为什么不能只使用 12K 元素。

控制台不显示错误。

【问题讨论】:

  • 您尝试过批量插入吗? stackoverflow.com/a/25313401/10387396
  • 是的,我刚试过那个东西。结果相同。我使用 mongoose.connection 执行该 initializeUnorderedBulkOp() ..
  • 我想也许我应该直接使用mongod驱动。
  • 什么特别不起作用?

标签: node.js mongodb mongoose


【解决方案1】:

最后我解决了使用 mongo 驱动程序的 javascript 和批量大小逻辑:

const batchSize = 1000;
        const col = db.collection('products');
        let batch = col.initializeUnorderedBulkOp();
        for (let i = 0; i <= products.length; i += 1) {
          if (products[i]) {
            batch.insert(products[i]);
            if (i % batchSize === 0) {
              batch.execute();
              batch = col.initializeUnorderedBulkOp();
            }
          }
        }
        return batch.execute();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-19
    • 2018-08-31
    • 2013-11-11
    • 1970-01-01
    • 2020-09-15
    • 2016-09-22
    • 1970-01-01
    • 2023-03-11
    相关资源
    最近更新 更多