MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Inserimento in blocco in MongoDB usando mangusta

Potresti voler utilizzare insertMany() metodo qui se stai utilizzando l'ultima versione di Mongoose 4.4.X e superiore, che utilizza essenzialmente Model.collection.insertMany() sotto il cofano e il driver potrebbe gestire la parallelizzazione di >= 1000 documenti per te.

myData = [Obj1, Obj2, Obj3.......];
Collection1.insertMany(myData, function(error, docs) {});

o utilizzando Promise per una migliore gestione degli errori

Collection1.insertMany(myData)
    .then(function(docs) {
         // do something with docs
    })
    .catch(function(err) {
        // error handling here
    });

Funziona creando un mucchio di documenti, chiama .validate() su di essi in parallelo, quindi chiama il driver sottostante insertMany() sul risultato di toObject({ virtuals: false }); di ogni documento.Anche se insertMany() non attiva hook di pre-salvataggio, ha prestazioni migliori perché effettua solo 1 andata e ritorno al server anziché 1 per ogni documento.

Per le versioni di Mongoose ~3.8.8, ~3.8.22, 4.x che supportano MongoDB Server >=2.6.x , puoi utilizzare l'Bulk API come segue

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
    });
}