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

Apakah ini cara yang aman untuk menyisipkan dan memperbarui array objek di mongodb?

Menggunakan bulkWrite API untuk melakukan pembaruan menangani ini dengan lebih baik

mongodb.connect(mongo_url, function(err, db) {
    if(err) console.log(err)
    else {
        var mongo_products_collection = db.collection("products")

        mongoUpsert(mongo_products_collection, data_products, function() {
            db.close()
        })
    }
})

function mongoUpsert(collection, data_array, cb) {

    var bulkUpdateOps = data_array.map(function(data) {
        return {
            "updateOne": {
                "filter": { 
                    "product_id": data.product_id,
                    "post_modified": { "$ne": data.post_modified }
                },
                "update": { "$set": data },
                "upsert": true
            }
        };
    });

    collection.bulkWrite(bulkUpdateOps, function(err, r) {
        // do something with result
    });

    return cb(false);
}

Jika Anda berurusan dengan array yang lebih besar yaitu> 1000 maka pertimbangkan untuk mengirim penulisan ke server dalam batch 500 yang memberi Anda kinerja yang lebih baik karena Anda tidak mengirim setiap permintaan ke server, hanya sekali dalam setiap 500 permintaan.

Untuk operasi massal, MongoDB memberlakukan batas internal default 1000 operasi per batch sehingga pilihan 500 dokumen baik dalam arti bahwa Anda memiliki kontrol atas ukuran batch daripada membiarkan MongoDB memaksakan default, yaitu untuk operasi yang lebih besar dalam besarnya> 1000 dokumen. Jadi untuk kasus di atas dalam pendekatan pertama, kita bisa menulis semua array sekaligus karena ini kecil tetapi pilihan 500 adalah untuk array yang lebih besar.

var ops = [],
    counter = 0;

data_array.forEach(function(data) {
    ops.push({
        "updateOne": {
            "filter": { 
                "product_id": data.product_id, 
                "post_modified": { "$ne": data.post_modified } 
            },
            "update": { "$set": data },
            "upsert": true
        }
    });
    counter++;

    if (counter % 500 == 0) {
        collection.bulkWrite(ops, function(err, r) {
            // do something with result
        });
        ops = [];
    }
})

if (counter % 500 != 0) {
    collection.bulkWrite(ops, function(err, r) {
        // do something with result
    }
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Permintaan Mongodb lambat dengan notasi titik

  2. permintaan meteor untuk semua dokumen dengan bidang unik

  3. Gabungkan nilai yang berbeda di MongoDB

  4. Kueri MongoDb dan system.linq

  5. 4 Cara Mendaftar Koleksi dalam Basis Data MongoDB