MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Aktualisieren Sie viele Dokumente in mongoDB mit unterschiedlichen Werten

Führen Sie dieses Update am besten mit bulkWrite API. Betrachten Sie das folgende Beispiel für die beiden obigen Dokumente:

var bulkUpdateOps = [
    {
        "updateOne": {
            "filter": { "reference": 10 },
            "update": { "$push": { "history": history1 } }
        }
    },
    {
        "updateOne": {
            "filter": { "reference": 20 },
            "update": { "$push": { "history": history2 } }
        }
    }
];

mongo.financeCollection.bulkWrite(bulkUpdateOps, 
    {"ordered": true, "w": 1}, function(err, result) {
        // do something with result
        callback(err); 
    }

Der {"ordered":true, "w":1} sorgt dafür, dass die Dokumente seriell in der vorgegebenen Reihenfolge auf dem Server aktualisiert werden und somit im Fehlerfall alle weiteren Updates abgebrochen werden. Der {"w":1} Die Option bestimmt das Schreibproblem, wobei 1 eine Anforderungsbestätigung ist, dass die Schreiboperation an den eigenständigen Mongod oder den primären in einem Replikatsatz weitergegeben wurde.

Für MongoDB >=2.6 und <=3.0 , verwenden Sie die API für Massenoperationen wie folgt:

var bulkUpdateOps = mongo.financeCollection.initializeOrderedBulkOp();
bulkUpdateOps
    .find({ "reference": 10 })
    .updateOne({
        "$push": { "history": history1 }
    });
bulkUpdateOps
    .find({ "reference": 20 })
    .updateOne({
        "$push": { "history": history2 }
    });

bulk.execute(function(err, result){
    bulkUpdateOps = mongo.financeCollection.initializeOrderedBulkOp();
    // do something with result
    callback(err);
});