MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Insertion en bloc dans MongoDB à l'aide de mangouste

Vous voudrez peut-être utiliser le insertMany() méthode ici si vous utilisez la dernière version de Mongoose 4.4.X et supérieur, qui utilise essentiellement Model.collection.insertMany() sous le capot et le pilote peut gérer la parallélisation >= 1000 documents pour vous.

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

ou en utilisant Promesses pour une meilleure gestion des erreurs

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

Cela fonctionne en créant un tas de documents, appelle .validate() sur eux en parallèle, puis appelle le pilote sous-jacent insertMany() sur le résultat de toObject({ virtuals: false }); de chaque doc.Bien que insertMany() ne déclenche pas de crochets de pré-enregistrement, il a de meilleures performances car il ne fait qu'un aller-retour vers le serveur au lieu d'un pour chaque document.

Pour les versions de Mongoose ~3.8.8, ~3.8.22, 4.x qui prennent en charge MongoDB Server >=2.6.x , vous pouvez utiliser l'Bulk API comme suit

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