Richtige Weg, um fügen Sie viele Datensätze in Mongodb mit Node.js
Ich Frage mich, was ist der richtige Weg, das zu tun, masseneinfügungen in Mongodb (obwohl, könnte auch jede andere Datenbank) mit Node.js
Ich geschrieben habe folgenden code als Beispiel, obwohl ich glaube, es ist Platt wie db.close() kann ausgeführt werden, bevor die asynchrone Sammlung.legen Sie Anrufe abgeschlossen haben.
MongoClient.connect('mongodb://127.0.0.1:27017/test', function (err, db) {
var i, collection;
if (err) {
throw err;
}
collection = db.collection('entries');
for (i = 0; i < entries.length; i++) {
collection.insert(entries[i].entry);
}
db.close();
});
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Ihr MongoDB-server 2.6 oder neuer, es wäre besser, um die Vorteile der Verwendung einer write-Befehle Bulk-API, die es ermöglichen, für die Durchführung der bulk insert-Vorgänge, die einfach sind Abstraktionen, die auf dem server, um es einfach zu bauen bulk-Operationen und damit die perfomance Gewinn mit Ihrem update über große Sammlungen.
Senden Sie die bulk insert-Vorgänge in den Reihen führt zu weniger traffic auf dem server und nimmt damit eine effiziente Draht-Transaktionen, indem Sie senden nicht alles in einzelnen Aussagen, sondern bricht in überschaubare Stücke für den server Verpflichtung. Es ist auch weniger Wartezeit für die Antwort im callback mit diesem Ansatz.
Diese bulk-Operationen kommen im wesentlichen in zwei Geschmacksrichtungen:
Beachten Sie, dass bei älteren Servern als 2.6 die API wird downconvert der Operationen. Allerdings ist es nicht möglich, downconvert 100%, so dass möglicherweise gibt es einige Grenzfälle, wo es nicht richtig melden den richtigen zahlen.
In Ihrem Fall könnten Sie implementieren die Bulk-API-insert-operation in batches von 1000 wie diese:
Für MongoDB 3.2+ mit
bulkWrite
Für MongoDB <3.2
Rufen Sie die
createNewEntries()
Funktion.counter % 1000 == 0
db.close();
Anweisung nach derif (counter % 1000 != 0 ){ ... }
Anweisungsblock zu schließen, die db, nachdem alle.db.close()
während diebulk.execute
Anrufe von der forEach-noch ausgeführt werden?bulk.execute()
ist ein Schreibvorgang mongodb und seine asynchrone IO-Aufruf. Dies ermöglicht node.js um fortzufahren mit den Ereignis-Schleife vorbulk.execute()
fertig ist mit seinem db schreibt und ruft zurück. Ich habe aktualisiert, meine Antwort mit dieser callback-Ansatz.Können Sie
insertMany
. Es akzeptiert ein array von Objekten. Überprüfen Sie die API.Neu in der version 3.2.
Den db.Sammlung.bulkWrite() Methode bietet die Möglichkeit zum ausführen der bulk insert -, update-und remove-Operationen. MongoDB unterstützt auch bulk insert durch die db.Sammlung.insertMany().
In bulkWrite es unterstützt nur insertOne, updateOne, updateMany, replaceOne, deleteOne, deleteMany
In Ihrem Fall zum einfügen von Daten über eine einzige code-Zeile, die er nutzen kann, insertMany option.
JS: