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

Como fazer corretamente um upsert/atualização em massa no MongoDB


Sua sintaxe aqui está basicamente correta, mas sua execução geral estava errada e você deveria ter "separado" a ação "upsert" das outras modificações. Caso contrário, eles "confrontarão" e produzirão um erro quando ocorrer um "upsert":
LineupPointsRecord.native(function (err,collection) {

    var bulk = collection.initializeOrderedBulkOp();

    // Match and update only. Do not attempt upsert
    bulk.find({
        "teamId": lineUpPointsGeneralRecord.teamId,
        "round": 0
    }).updateOne({
        "$inc": { "lfPoints": roundPoints },
        "$push": { "roundPoints": roundPoints }
    });

    // Attempt upsert with $setOnInsert only
    bulk.find({
        "teamId": lineUpPointsGeneralRecord.teamId,
        "round": 0
    }).upsert().updateOne({
        "$setOnInsert": lineUpPointsGeneralRecord
    });

    bulk.execute(function (err,updateResult) {
        sails.log.debug(err,updateResult);
    });
});

Certifique-se de que seu velas-mongo é uma versão mais recente que suporta as operações em massa corretamente seja a inclusão de um driver nativo do nó recente. O mais recente suporta o driver v2, o que é bom para isso.