MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Mongodb foreach untuk koleksi bersarang untuk memperbarui/menyalin dokumen ke koleksi lain

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
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Permintaan pembaruan db Mongo tidak berfungsi di dokumen yang disematkan di Azure cosmos db

  2. mongo export SyntaxError:missing; sebelum pernyataan @(kulit)::1:14

  3. Bagaimana cara saya meminta nilai yang berbeda di Mongoose tetapi mengembalikan semua dokumen?

  4. MongoDB meminta beberapa koleksi sekaligus

  5. MongoDB $strLenCP