从nodejs在mongodb中插入一大块对象

Mic*_*sov 5 bigdata mongodb node.js

我需要从nodejs在mongodb中插入一大堆对象(大约1.5-2百万).我怎样才能改善插入?

这是我的代码:

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);
    }
  });
}
Run Code Online (Sandbox Code Playgroud)

Chr*_*n P 16

您可以使用批量插入.

有两种类型的批量操作:

  1. 订购批量操作.这些操作按顺序执行所有操作,并在第一次写入错误时执行错误输出.
  2. 无序批量操作.这些操作并行执行所有操作并聚合所有错误.无序批量操作不保证执行顺序.

所以你可以这样做:

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();
    });
});
Run Code Online (Sandbox Code Playgroud)