Model.create() vs Model.collection.insert():pendekatan yang lebih cepat
Model.create()
adalah cara yang buruk untuk melakukan penyisipan jika Anda berurusan dengan jumlah yang sangat besar. Ini akan menjadi sangat lambat . Dalam hal ini Anda harus menggunakan Model.collection.insert
, yang berkinerja jauh lebih baik . Bergantung pada ukuran massal, Model.create()
bahkan akan jatuh! Mencoba dengan sejuta dokumen, tidak berhasil. Menggunakan Model.collection.insert
hanya butuh beberapa detik.
Model.collection.insert(docs, options, callback)
docs
adalah larik dokumen yang akan disisipkan;options
adalah objek konfigurasi opsional - lihat dokumencallback(err, docs)
akan dipanggil setelah semua dokumen disimpan atau terjadi kesalahan. Jika berhasil, dokumen adalah kumpulan dokumen yang bertahan.
Seperti yang ditunjukkan oleh penulis Mongoose di sini, metode ini akan melewati prosedur validasi apa pun dan mengakses driver Mongo secara langsung. Ini adalah trade-off yang harus Anda lakukan karena Anda menangani sejumlah besar data, jika tidak, Anda tidak akan dapat memasukkannya ke database Anda sama sekali (ingat kita berbicara tentang ratusan ribu dokumen di sini).
Contoh sederhana
var Potato = mongoose.model('Potato', PotatoSchema);
var potatoBag = [/* a humongous amount of potato objects */];
Potato.collection.insert(potatoBag, onInsert);
function onInsert(err, docs) {
if (err) {
// TODO: handle error
} else {
console.info('%d potatoes were successfully stored.', docs.length);
}
}
Pembaruan 22-06-2019 :meskipun insert()
masih dapat digunakan dengan baik, sudah tidak digunakan lagi karena insertMany()
. Parameternya persis sama, jadi Anda bisa menggunakannya sebagai pengganti drop-in dan semuanya akan berfungsi dengan baik (baik, nilai pengembaliannya sedikit berbeda, tetapi Anda mungkin tidak menggunakannya).
Referensi
- Dokumentasi Mongo
- Aaron Heckman di Google Grup membahas penyisipan massal