MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come eseguire correttamente un upsert/aggiornamento in blocco in MongoDB

La tua sintassi qui è sostanzialmente corretta, ma la tua esecuzione generale era sbagliata e avresti dovuto "separare" l'azione "upsert" dalle altre modifiche. In caso contrario, questi "scontreranno" e produrranno un errore quando si verifica un "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);
    });
});

Assicurati che il tuo sails-mongo è un'ultima versione che supporta correttamente le operazioni di massa sia l'inclusione di un driver nativo del nodo recente. Il più recente supporta il driver v2, che va bene per questo.