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

Comment effectuer correctement une mise à jour/upsert en masse dans MongoDB

Votre syntaxe ici est fondamentalement correcte, mais votre exécution générale était erronée et vous auriez dû "séparer" l'action "upsert" des autres modifications. Sinon, ceux-ci "clasheront" et produiront une erreur lorsqu'un "upsert" se produit :

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

Assurez-vous que votre sails-mongo est une dernière version prenant en charge les opérations en bloc correctement grâce à l'inclusion d'un pilote natif de nœud récent. Le plus récent prend en charge le pilote v2, ce qui est bien pour cela.