Kirim operasi penyisipan massal dalam batch karena ini menghasilkan lebih sedikit lalu lintas ke server dan dengan demikian melakukan transaksi kawat yang efisien dengan tidak mengirimkan semuanya dalam pernyataan individual, melainkan memecah menjadi potongan yang dapat dikelola untuk komitmen server. Ada juga lebih sedikit waktu menunggu respons dalam panggilan balik dengan pendekatan ini.
Pendekatan yang jauh lebih baik dengan ini adalah menggunakan async modul sehingga bahkan mengulang daftar input adalah operasi non-pemblokiran. Memilih ukuran batch dapat bervariasi, tetapi memilih operasi penyisipan batch per 1000 entri akan membuatnya aman untuk tetap berada di bawah batas keras BSON 16MB, karena keseluruhan "permintaan" sama dengan satu dokumen BSON.
Berikut ini menunjukkan penggunaan async modul sementara untuk beralih melalui array dan berulang kali memanggil fungsi iterator, sementara tes mengembalikan nilai true. Memanggil callback saat dihentikan, atau saat terjadi kesalahan.
var bulk = col.initializeOrderedBulkOp(),
counter = 0,
len = array.length,
buildModel = function(index){
return {
"data": array[index],
"metaData": {
"hash": hash,
"date": timestamp,
"name": name
}
}
};
async.whilst(
// Iterator condition
function() { return counter < len },
// Do this in the iterator
function (callback) {
counter++;
var model = buildModel(counter);
bulk.insert(model);
if (counter % 1000 == 0) {
bulk.execute(function(err, result) {
bulk = col.initializeOrderedBulkOp();
callback(err);
});
} else {
callback();
}
},
// When all is done
function(err) {
if (counter % 1000 != 0) {
bulk.execute(function(err, result) {
console.log("More inserts.");
});
}
console.log("All done now!");
}
);