Model.create () so với Model.collection.insert ():cách tiếp cận nhanh hơn
Model.create()
là một cách không tốt để thực hiện chèn nếu bạn đang xử lý một số lượng lớn rất lớn. Nó sẽ rất chậm . Trong trường hợp đó, bạn nên sử dụng Model.collection.insert
, hoạt động tốt hơn nhiều . Tùy thuộc vào kích thước của hàng loạt, Model.create()
thậm chí sẽ sụp đổ! Đã thử với một triệu tài liệu, không có may mắn. Sử dụng Model.collection.insert
chỉ mất vài giây.
Model.collection.insert(docs, options, callback)
-
docs
là mảng tài liệu sẽ được chèn vào; -
options
là một đối tượng cấu hình tùy chọn - xem tài liệu -
callback(err, docs)
sẽ được gọi sau khi tất cả các tài liệu được lưu hoặc xảy ra lỗi. Về thành công, tài liệu là mảng tài liệu tồn tại lâu dài.
Như tác giả của Mongoose đã chỉ ra ở đây, phương pháp này sẽ bỏ qua bất kỳ quy trình xác thực nào và truy cập trực tiếp vào trình điều khiển Mongo. Đó là một sự đánh đổi bạn phải thực hiện vì bạn đang xử lý một lượng lớn dữ liệu, nếu không bạn sẽ không thể chèn nó vào cơ sở dữ liệu của mình (hãy nhớ rằng chúng ta đang nói đến hàng trăm nghìn tài liệu ở đây).
Một ví dụ đơn giản
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);
}
}
Cập nhật 2019-06-22 :mặc dù insert()
vẫn có thể được sử dụng tốt, nó đã không được chấp nhận thay vì insertMany()
. Các tham số hoàn toàn giống nhau, vì vậy bạn chỉ có thể sử dụng nó như một sự thay thế thả vào và mọi thứ sẽ hoạt động tốt (tốt, giá trị trả về hơi khác một chút, nhưng có thể bạn đang không sử dụng nó).
Tham khảo
- Tài liệu Mongo
- Aaron Heckman trên Google Groups thảo luận về việc chèn số lượng lớn