Jika server MongoDB Anda 2.6 atau yang lebih baru, akan lebih baik untuk memanfaatkan penggunaan perintah tulis API Massal yang memungkinkan eksekusi sisipan massal operasi yang hanya abstraksi di atas server untuk memudahkan membangun operasi massal. Operasi massal ini datang terutama dalam dua rasa:
- Operasi massal yang dipesan . Operasi ini menjalankan semua operasi secara berurutan dan kesalahan pada kesalahan penulisan pertama.
- Operasi massal tidak berurutan . Operasi ini menjalankan semua operasi secara paralel dan mengumpulkan semua kesalahan. Operasi massal yang tidak berurutan tidak menjamin urutan eksekusi.
Catatan, untuk server yang lebih lama dari 2.6, API akan menurunkan konversi operasi. Namun tidak mungkin untuk menurunkan konversi 100% sehingga mungkin ada beberapa kasus tepi di mana ia tidak dapat melaporkan angka yang benar dengan benar.
Dalam kasus Anda, Anda dapat menerapkan API Massal seperti ini:
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect("mongodb://localhost:27017/course", function(err, db) {
// Handle error
if(err) throw err;
// Get the collection and bulk api artefacts
var col = db.collection('students'),
types = ['exam', 'quiz', 'homework', 'homework'],
bulk = col.initializeOrderedBulkOp(), // Initialize the Ordered Batch
counter = 0;
// Drop the collection
col.drop();
// Representing a long loop with 1 Million Records
for (var i = 0; i < 1000000; i++) {
var scores = [],
class_id = 0,
record = {};
// Each student taking 10 classes
for (var class_counter = 0; class_counter < 10; class_counter ++) {
// Each Class has 4 grades
// and each class has 4 grades
for (var j = 0; j < 4; j++) {
scores.push({ 'type': types[j], 'score': Math.random()*100 });
}
// there are 500 different classes that they can take
class_id = Math.floor(Math.random() * 501); // get a class id between 0 and 500
record['student_id'] = i;
record['scores'] = scores;
record['class_id'] = class_id;
}
bulk.insert(record);
counter++;
if (counter % 1000 == 0 ) {
bulk.execute(function(err, result) {
// re-initialise batch operation
bulk = col.initializeOrderedBulkOp();
});
}
}
if (counter % 1000 != 0 ){
bulk.execute(function(err, result) {
// do something with result
db.close();
});
}
});
-- PEMBARUAN --
Kudos to @MarkusWMahlberg, untuk menghasilkan konten dummy, Anda mungkin ingin mencoba paket mgenerate .