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

Multi update luwak

Misalkan Anda memiliki array objek yang ingin Anda perbarui dalam koleksi Anda pada id yang cocok seperti

var soldItems = [
        {
            "_id": 1,
            "value": 4
        },
        {
            "_id": 2,
            "value": 27
        }
    ];

maka Anda dapat menggunakan forEach() metode pada array untuk mengulanginya dan memperbarui koleksi Anda:

soldItems.forEach(function(item)){
    Model.update({"_id": item._id}, {"$set": {"value": item.value }}, callback);
});

atau gunakan janji sebagai

var updates = [];
soldItems.forEach(function(item)){
    var updatePromise = Model.update({"_id": item._id}, {"$set": {"value": item.value }});
    updates.push(updatePromise);
});

Promise.all(updates).then(function(results){
    console.log(results);
});

atau menggunakan peta map()

var updates = soldItems.map(function(item)){
    return Model.update({"_id": item._id}, {"$set": {"value": item.value }});       
});

Promise.all(updates).then(function(results){
    console.log(results);
}); 

Untuk array yang lebih besar, Anda dapat memanfaatkan penggunaan API penulisan massal untuk kinerja yang lebih baik. Untuk versi luwak >=4.3.0 yang mendukung MongoDB Server 3.2.x ,Anda dapat menggunakan bulkWrite() untuk pembaruan. Contoh berikut menunjukkan bagaimana Anda dapat melakukannya:

var bulkUpdateCallback = function(err, r){
    console.log(r.matchedCount);
    console.log(r.modifiedCount);
}
// Initialise the bulk operations array
var bulkOps = soldItems.map(function (item) { 
    return { 
        "updateOne": { 
            "filter": { "_id": item._id } ,              
            "update": { "$set": { "value": item.value } } 
        }         
    }    
});

// Get the underlying collection via the native node.js driver collection object
Model.collection.bulkWrite(bulkOps, { "ordered": true, w: 1 }, bulkUpdateCallback);

Untuk versi luwak ~3.8.8, ~3.8.22, 4.x yang mendukung Server MongoDB >=2.6.x , Anda dapat menggunakan Bulk API sebagai berikut

var bulk = Model.collection.initializeOrderedBulkOp(),
    counter = 0;

soldItems.forEach(function(item) {
    bulk.find({ "_id": item._id }).updateOne({ 
        "$set": { "value": item.value }
    });

    counter++;
    if (counter % 500 == 0) {
        bulk.execute(function(err, r) {
           // do something with the result
           bulk = Model.collection.initializeOrderedBulkOp();
           counter = 0;
        });
    }
});

// Catch any docs in the queue under or over the 500's
if (counter > 0) {
    bulk.execute(function(err,result) {
       // do something with the result here
    });
}


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mengonfigurasi oauth2-server-laravel dengan laravel-mongodb

  2. mencoba menampilkan data dalam batu giok dari mongodb

  3. Pembuatan Versi Objek Java MongoDB

  4. Cara MEMESAN BERDASARKAN NILAI BIDANG di MongoDB

  5. Menghubungkan ke MongoDB menggunakan driver PDO