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

Masseindsats i MongoDB ved hjælp af mongoose

Du vil måske bruge insertMany() metode her, hvis du bruger den seneste Mongoose-version 4.4.X og større, som i det væsentlige bruger Model.collection.insertMany() under motorhjelmen og føreren kan håndtere parallelisering af >= 1000 dokumenter til dig.

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

eller ved at bruge Promises for bedre fejlhåndtering

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

Det virker ved at oprette en masse dokumenter, kalder .validate() på dem parallelt, og kalder derefter den underliggende drivers insertMany() på resultatet af toObject({ virtuals: false }); af hvert dokument. Selvom insertMany() udløser ikke pre-save hooks, den har bedre ydeevne, fordi den kun foretager 1 rundrejse til serveren i stedet for 1 for hvert dokument.

For Mongoose-versioner ~3.8.8, ~3.8.22, 4.x som understøtter MongoDB Server >=2.6.x , kan du bruge Bulk API som følger

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. Hvorfor kræver et mongodb replikasæt et ulige antal afstemningsknuder?

  2. Sådan forespørges MongoDB med like

  3. Spring Data MongoDB eliminerer POJO'er

  4. MongoDB Aggregation:Dobbelt opslag og flet opslagssvar til det respektive objekt