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

Mongo massal menemukan dan memperbarui bidang dokumen yang cocok dalam satu permintaan?

Untuk meningkatkan kinerja, manfaatkan penggunaan Bulk() API untuk memperbarui koleksi secara efisien dalam jumlah besar karena Anda akan mengirim operasi ke server dalam batch (misalnya, ukuran batch 500). Ini memberi Anda kinerja yang jauh lebih baik karena Anda tidak akan mengirim setiap permintaan ke server tetapi hanya sekali dalam setiap 500 permintaan, sehingga membuat pembaruan Anda lebih efisien dan lebih cepat.

Berikut ini menunjukkan pendekatan ini, contoh pertama menggunakan Bulk() API tersedia dalam versi MongoDB>=2.6 dan <3.2. Ini memperbarui semua dokumen yang cocok dalam koleksi dari larik yang diberikan dengan menambah 1 ke bidang yang ditampilkan. Ini mengasumsikan array gambar memiliki struktur

var images = [
    { "_id": 1, "name": "img_1.png" },
    { "_id": 2, "name": "img_2.png" }
    { "_id": 3, "name": "img_3.png" },
    ...
    { "_id": n, "name": "img_n.png" }
]

Versi MongoDB>=2.6 dan <3.2 :

var bulk = db.images.initializeUnorderedBulkOp(),
    counter = 0;

images.forEach(function (doc) {    
    bulk.find({ "_id": doc._id }).updateOne({ 
        "$inc": { "shown": 1 }
    });

    counter++;
    if (counter % 500 === 0) {
        // Execute per 500 operations
        bulk.execute(); 
        // re-initialize every 500 update statements
        bulk = db.images.initializeUnorderedBulkOp();
    }
})
// Clean up remaining queue
if (counter % 500 !== 0) { bulk.execute(); }

Contoh berikutnya berlaku untuk MongoDB versi 3.2 yang baru, yang sejak itu tidak lagi menggunakan Bulk() API dan menyediakan kumpulan api yang lebih baru menggunakan bulkWrite() .

MongoDB versi 3.2 dan yang lebih baru :

var ops = [];
images.forEach(function(doc) {
    ops.push({
        "updateOne": {
            "filter": { "_id": doc._id },
            "update": {
                "$inc": { "shown": 1 }
            }
        }
    });

    if (ops.length === 500 ) {
        db.images.bulkWrite(ops);
        ops = [];
    }
})

if (ops.length > 0)  
    db.images.bulkWrite(ops);



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cara memasukkan banyak item sekaligus dalam koleksi MongoDB

  2. Sumber Daya MongoDB Teratas

  3. Menggunakan MongoDB $pull untuk menghapus dokumen dalam Array

  4. Bagaimana cara menjalankan perintah mongo melalui skrip Shell?

  5. Mendeteksi Apakah Nilai Berisi Setidaknya Satu Digit Numerik dalam SQL