MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie man eine Massen-Upsert/-Aktualisierung in MongoDB richtig durchführt

Ihre Syntax hier ist grundsätzlich korrekt, aber Ihre allgemeine Ausführung war falsch und Sie hätten die Aktion "Upsert" von den anderen Änderungen "trennen" sollen. Andernfalls "kollidieren" diese und erzeugen einen Fehler, wenn ein "Upsert" auftritt:

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

Stellen Sie sicher, dass Ihr sails-mongo ist eine neueste Version, die die Bulk-Operationen ordnungsgemäß unterstützt, da ein neuer nativer Knotentreiber enthalten ist. Die neueste unterstützt den v2-Treiber, was dafür in Ordnung ist.