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

Comment puis-je upsert plusieurs objets avec MongoDB &Node.js ?

Utilisez le bulkWrite API pour effectuer les mises à jour :

var bulkUpdateOps = genres.map(function(doc) {
    return {
        "updateOne": {
            "filter": { "_id": doc.id },
            "update": { "$set": { "name": doc.name } },
            "upsert": true
        }
    };
});

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

Si vous avez affaire à des tableaux plus grands, c'est-à-dire> 1000, envisagez d'envoyer les écritures au serveur par lots de 500, ce qui vous donne de meilleures performances car vous n'envoyez pas toutes les requêtes au serveur, une seule fois toutes les 500 requêtes :

var bulkUpdateOps = [],
    counter = 0;

genres.forEach(function(doc) {
    bulkUpdateOps.push({
        "updateOne": {
            "filter": { "_id": doc.id },
            "update": { "$set": { "name": doc.name } },
            "upsert": true
        }
    });
    counter++;

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

if (counter % 500 != 0) {
    db.collection('genres').bulkWrite(bulkUpdateOps, function(err, r) {
        // do something with the result
    });
}