Jika Anda akan memperbarui seluruh koleksi maka limit
pada kursor Anda dalam kode Anda saat ini tidak diperlukan. Kesalahan yang Anda dapatkan adalah karena mappingData
bidang di products
koleksi tidak memiliki bidang subdokumen yang disebut array
. Dari contoh Anda dalam pertanyaan, hanya title
bidang subdokumen tersedia, dan itulah yang Anda inginkan.
Bergantung pada ukuran koleksi produk, menyisipkan dokumen yang dikonversi ke koleksi baru dapat memengaruhi operasi Anda. Anda dapat menghindari kinerja penyisipan yang lambat dengan menggunakan API penyisipan massal yang menyederhanakan operasi penyisipan Anda dengan mengirimkannya secara massal, dan bahkan lebih baik lagi, ini memberi Anda umpan balik nyata tentang apa yang berhasil dan apa yang gagal.
Operasi API penyisipan massal berikut akan dimasukkan ke newcollection
struktur data yang diinginkan tempat dokumen baru dibuat dalam forEach()
loop, menggunakan notasi braket
untuk membuat properti baru. Dalam penyisipan massal, Anda akan mengirimkan operasi ke server dalam kumpulan 1000 yang memberi Anda kinerja yang lebih baik karena Anda tidak mengirim setiap permintaan ke server, hanya sekali dalam setiap 1000 permintaan:
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(); }
Dengan contoh di atas, umpan balik yang Anda dapatkan dari operasi API massal akan dalam format ini:
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 2,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
Membuat kueri koleksi baru db.newcollection.find()
akan menghasilkan:
/* 0 */
{
"_id" : ObjectId("56558b0427adb60c9f7e6f8d"),
"title" : "Toshiba Satellite Pro 4600 PIII800",
"Manufacturer" : "Toshiba"
}
/* 1 */
{
"_id" : ObjectId("56558b0427adb60c9f7e6f8e"),
"title" : "Apple Ihone",
"Manufacturer" : undefined
}