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

Como posso upser vários objetos com MongoDB e Node.js?


Use o bulkWrite API para realizar as atualizações:
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
})

Se você estiver lidando com matrizes maiores, ou seja,> 1000, considere enviar as gravações para o servidor em lotes de 500, o que oferece um desempenho melhor, pois você não está enviando todas as solicitações ao servidor, apenas uma vez a cada 500 solicitações:
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
    });
}