MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Atualize muitos documentos no mongoDB com valores diferentes


É melhor fazer essa atualização usando o bulkWrite API. Considere o seguinte exemplo para os dois documentos acima:
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); 
    }

O {"ordered": true, "w": 1} garante que os documentos serão atualizados no servidor serialmente, na ordem fornecida e, portanto, se ocorrer um erro, todas as atualizações restantes serão abortadas. O {"w": 1} A opção determina a preocupação de gravação com 1 sendo uma confirmação de solicitação de que a operação de gravação foi propagada para o mongod autônomo ou o primário em um conjunto de réplicas.

Para MongoDB >= 2.6 e <= 3.0 , use a API de operações em massa do seguinte modo:
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);
});