Nếu bạn định cập nhật toàn bộ bộ sưu tập thì limit
trên con trỏ của bạn trong mã hiện tại của bạn là không cần thiết. Lỗi bạn gặp phải là do mappingData
trong products
bộ sưu tập không có trường tài liệu con được gọi là array
. Từ ví dụ của bạn trong câu hỏi, chỉ có title
trường phụ tài liệu có sẵn và đó là trường bạn muốn.
Tùy thuộc vào kích thước của bộ sưu tập sản phẩm, việc chèn các tài liệu đã chuyển đổi vào bộ sưu tập mới có thể ảnh hưởng đến hoạt động của bạn. Bạn có thể tránh hiệu suất chèn chậm bằng cách sử dụng API chèn hàng loạt giúp hợp lý hóa các hoạt động chèn của bạn bằng cách gửi hàng loạt và tốt hơn nữa, nó cung cấp cho bạn phản hồi thực tế về những gì đã thành công và những gì không thành công.
Thao tác API chèn hàng loạt sau sẽ chèn vào newcollection
cấu trúc dữ liệu mong muốn nơi các tài liệu mới được tạo bên trong con trỏ bộ sưu tập sản phẩm forEach()
vòng lặp, sử dụng ký hiệu dấu ngoặc
để tạo các thuộc tính mới. Trong phần chèn hàng loạt, bạn sẽ gửi các hoạt động đến máy chủ theo lô 1000, điều này mang lại cho bạn hiệu suất tốt hơn vì bạn không gửi mọi yêu cầu đến máy chủ, chỉ một lần trong mỗi 1000 yêu cầu:
var bulk = db.newcollection.initializeUnorderedBulkOp(),
counter = 0;
db.products.find().forEach(function(doc) {
var document = {};
if (doc.mappingData.title) document["title"] = doc[doc.mappingData.title];
document["Manufacturer"] = doc.Manufacture;
bulk.insert(document);
counter++;
if (counter % 1000 == 0) {
bulk.execute();
bulk = db.newcollection.initializeUnorderedBulkOp();
}
});
if (counter % 1000 != 0) { bulk.execute(); }
Với ví dụ trên, phản hồi bạn nhận được từ hoạt động API hàng loạt sẽ ở định dạng sau:
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 2,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
Truy vấn bộ sưu tập mới db.newcollection.find()
sẽ mang lại:
/* 0 */
{
"_id" : ObjectId("56558b0427adb60c9f7e6f8d"),
"title" : "Toshiba Satellite Pro 4600 PIII800",
"Manufacturer" : "Toshiba"
}
/* 1 */
{
"_id" : ObjectId("56558b0427adb60c9f7e6f8e"),
"title" : "Apple Ihone",
"Manufacturer" : undefined
}