首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在mongodb中从nodejs插入一个大的对象数组

在mongodb中从nodejs插入一个大的对象数组
EN

Stack Overflow用户
提问于 2014-05-29 15:41:29
回答 2查看 11.4K关注 0票数 7

我需要从nodejs在mongodb中插入一个大的对象数组(大约150-200万)。我如何改进我的插入?

这是我的代码:

代码语言:javascript
运行
复制
var sizeOfArray = arrayOfObjects.length; //sizeOfArray about 1.5-2 millions
for(var i = 0; i < sizeOfResult; ++i) {
  newKey = {
    field_1: result[i][1],
    field_2: result[i][2],
    field_3: result[i][3]
  };
  collection.insert(newKey, function(err, data) {
    if (err) {
      log.error('Error insert: ' + err);
    }
  });
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-29 15:55:48

您可以使用bulk插入。

批量操作有两种类型:

  1. 已排序批量操作。这些操作按顺序执行所有操作,并在第一次写入error.
  2. Unordered批量操作时出错。这些操作并行执行所有操作,并汇总所有错误。无序的批量操作不保证执行的顺序。

所以你可以这样做:

代码语言:javascript
运行
复制
var MongoClient = require('mongodb').MongoClient;

MongoClient.connect("mongodb://myserver:27017/test", function(err, db) {
    // Get the collection
    var col = db.collection('myColl');

    // Initialize the Ordered Batch
    // You can use initializeUnorderedBulkOp to initialize Unordered Batch
    var batch = col.initializeOrderedBulkOp();

    for (var i = 0; i < sizeOfResult; ++i) {
      var newKey = {
          field_1: result[i][1],
          field_2: result[i][2],
          field_3: result[i][3]
      };
      batch.insert(newKey);
    }

    // Execute the operations
    batch.execute(function(err, result) {
      console.dir(err);
      console.dir(result);
      db.close();
    });
});
票数 20
EN

Stack Overflow用户

发布于 2020-02-07 06:17:58

对于3.2以上的版本,已经引入了insertMany,它仅在幕后使用bulkWrite进行批量插入。

  • insertMany支持有序和无序插入。无序速度更快,因为mongo决定了排序。同样,实现最佳吞吐量的实现也应该是:

var sizeOfArray = arrayOfObjects.length;for(var i= 0;i< sizeOfResult;++i) { newKey ={ field_1: resulti,field_2: resulti,field_3: resulti };} collection.insertMany(newKey,{ ordered: false }).then((res) => {console.log(“插入的记录数:”+ res.insertedCount);})

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23928267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档