MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Това безопасен начин ли е за вмъкване и актуализиране на масив от обекти в mongodb?

Използване на bulkWrite API за извършване на актуализации се справя по-добре с това

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);
}

Ако имате работа с по-големи масиви, т.е.> 1000, тогава помислете за изпращане на записите до сървъра на партиди от 500, което ви осигурява по-добра производителност, тъй като не изпращате всяка заявка към сървъра, а само веднъж на всеки 500 заявки.

За групови операции MongoDB налага вътрешно ограничение по подразбиране от 1000 операции на партида, така че изборът от 500 документа е добър в смисъл, че имате известен контрол върху размера на партидата, вместо да позволите на MongoDB да наложи стойността по подразбиране, т.е. за по-големи операции с обем> 1000 документа. Така че за горния случай при първия подход човек може просто да запише целия масив наведнъж, тъй като това е малко, но изборът 500 е за по-големи масиви.

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. Регулярен израз на MongoDB:Съдържа имейл в низ

  2. MongoDb C# GeoNear конструиране на заявка

  3. Инсталиране на play framework mongodb morphia module

  4. Обратен ред на елементите, изтеглени от базата данни в ng-repeat

  5. Получаване на отделно агрегиране на поле на масив между индекси