MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Inserção em massa no MongoDB usando mangusto


Você pode querer usar o insertMany() aqui se você estiver usando a versão mais recente do Mongoose 4.4.X e superior, que basicamente usa Model.collection.insertMany() sob o capô e o driver pode lidar com paralelização >= 1000 documentos para você.
myData = [Obj1, Obj2, Obj3.......];
Collection1.insertMany(myData, function(error, docs) {});

ou usando Promises para melhor tratamento de erros
Collection1.insertMany(myData)
    .then(function(docs) {
         // do something with docs
    })
    .catch(function(err) {
        // error handling here
    });

Ele funciona criando um monte de documentos, chama .validate() neles em paralelo e, em seguida, chama o insertMany() no resultado de toObject({ virtuals: false }); de cada documento.Embora insertMany() não aciona ganchos de pré-salvamento, tem melhor desempenho porque faz apenas 1 viagem de ida e volta ao servidor em vez de 1 para cada documento.

Para versões do Mongoose ~3.8.8, ~3.8.22, 4.x que suporta MongoDB Server >=2.6.x , você pode usar a Bulk API do seguinte modo
var bulk = Collection1.collection.initializeOrderedBulkOp(),
    counter = 0;

myData.forEach(function(doc) {
    bulk.insert(doc);

    counter++;
    if (counter % 500 == 0) {
        bulk.execute(function(err, r) {
           // do something with the result
           bulk = Collection1.collection.initializeOrderedBulkOp();
           counter = 0;
        });
    }
});

// Catch any docs in the queue under or over the 500's
if (counter > 0) {
    bulk.execute(function(err,result) {
       // do something with the result here
    });
}