Als uw MongoDB-server 2.6 of nieuwer is, is het beter om gebruik te maken van schrijfopdrachten Bulk-API waarmee de uitvoering van bulk insert operaties die eenvoudigweg abstracties zijn bovenop de server om het gemakkelijk te maken om bulkoperaties te bouwen. Deze bulkoperaties zijn er hoofdzakelijk in twee smaken:
- Bulkoperaties besteld . Deze bewerkingen voeren alle bewerkingen in volgorde uit en geven een foutmelding bij de eerste schrijffout.
- Ongeordende bulkbewerkingen . Deze bewerkingen voeren alle bewerkingen parallel uit en aggregeren alle fouten. Ongeordende bulkoperaties garanderen geen volgorde van uitvoering.
Let op, voor oudere servers dan 2.6 zal de API de bewerkingen naar beneden converteren. Het is echter niet mogelijk om 100% naar beneden te converteren, dus er kunnen enkele randgevallen zijn waarbij het niet correct de juiste cijfers kan rapporteren.
In jouw geval zou je de Bulk API zoals dit:
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();
});
}
});
-- BIJWERKEN --
Een pluim voor @MarkusWMahlberg, voor het genereren van dummy-inhoud wil je misschien het pakket mgenerate