MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Mettre à jour de nombreux documents dans mongoDB avec des valeurs différentes

Le mieux est de faire cette mise à jour en utilisant bulkWrite API. Considérez l'exemple suivant pour les deux documents ci-dessus :

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

Le {"ordered": true, "w": 1} garantit que les documents seront mis à jour sur le serveur en série, dans l'ordre indiqué et donc si une erreur se produit, toutes les mises à jour restantes sont interrompues. Le {"w": 1} L'option détermine le problème d'écriture, 1 étant un accusé de réception de la demande que l'opération d'écriture s'est propagée au mongod autonome ou au primaire dans un jeu de répliques.

Pour MongoDB >= 2.6 et <= 3.0 , utilisez l'l'API des opérations en masse comme suit :

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