sql >> Databáze >  >> NoSQL >> MongoDB

Hromadné vložení do MongoDB pomocí mongoose

Možná budete chtít použít insertMany() zde, pokud používáte nejnovější verzi Mongoose 4.4.X a vyšší, který v podstatě používá Model.collection.insertMany() pod kapotou a ovladač by mohl zvládnout paralelizaci >= 1000 dokumenty pro vás.

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

nebo pomocí Promises pro lepší zpracování chyb

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

Funguje tak, že vytvoří spoustu dokumentů, volá .validate() na nich paralelně a poté zavolá základní ovladač insertMany() na výsledku toObject({ virtuals: false }); každého dokumentu. Ačkoli insertMany() nespouští háky před uložením, má lepší výkon, protože provádí pouze 1 zpáteční cestu na server namísto 1 pro každý dokument.

Pro verze Mongoose ~3.8.8, ~3.8.22, 4.x které podporují MongoDB Server >=2.6.x , můžete použít Bulk API takto

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


  1. Jak mohu zjistit, zda existuje více výsledků z dotazu v MongoDB?

  2. Jak vypíšu celou databázi MongoDB jako text/json?

  3. Jak hledat dokument podle oid v mongoengine

  4. Porozumění indexům MongoDB