Sequelize - findOrCreate en la tabla "a través", en la asociación belongToMany

En primer lugar, soy bastante nuevo en Node.JS e incluso más nuevo en Sequelize, y esto me ha estado molestando por un tiempo. Tengo las siguientes entidades modelo:

Match.js

module.exports = function(sequelize, DataTypes) {
    var Match = sequelize.define('Match', {
            matchId: {
                type: DataTypes.BIGINT,
                field: 'match_id'
            },
            server: {
            type: DataTypes.STRING
            },
            (...)
            rankedBoo: {
                type: DataTypes.BOOLEAN,
                field: 'ranked_boo'
            }
    }, {
        classMethods: {
            associate: function(models) {
                Match.belongsToMany(models.Summoner, {as: 'Participants', through: 'SummonerMatch'});
            }
        },
        freezeTableName: true,
        underscored: true
    });

  return Match;
};

Summoner.js

module.exports = function(sequelize, DataTypes) {
  var Summoner = sequelize.define('Summoner', {
        summonerId: {
            type: DataTypes.INTEGER,
            field: 'summoner_id'
        },
        server: {
            type: DataTypes.STRING
        },
        summonerName: {
            type: DataTypes.STRING,
            field: 'summoner_name'
        },
        mainChampion: {
            type: DataTypes.INTEGER,
            field: 'main_champion'
        }
    }, {
        classMethods: {
            associate: function(models) {
                Summoner.belongsToMany(models.Match, {as: 'SummonerMatches', through: 'SummonerMatch'});
                Summoner.hasOne(models.RankedStats);
                Summoner.hasMany(models.RankedHistory, { as: { singular: 'RankedHistory', plural: 'RankedHistory' }});
            }
        },
        freezeTableName: true,
        underscored: true
    });


  return Summoner;
};

SummonerMatch.js

module.exports = function(sequelize, DataTypes) {
    var SummonerMatch = sequelize.define('SummonerMatch', {
        championId: {
            type: DataTypes.INTEGER,
            field: 'champion_id'
        },
        role: {
            type: DataTypes.STRING
        },
        (...)
        sightWardsBought: {
            type: DataTypes.INTEGER,
            field: 'sight_wards_bought'
        }
    }, {
        freezeTableName: true,
        underscored: true
    });

  return SummonerMatch;
};

Ahora estoy tratando de crear una nueva coincidencia, y asociarla con un invocador, y estoy haciendo lo siguiente:

summoner.createSummonerMatch(matchInfo, matchDetails).then(
    function () {
        callback();
        return null;
});

DóndematchInfo contiene los atributos de la entidad "Match", ypartidoDetalles contiene los atributos de la entidad "SummonerMatch".

Esto está bien y todo, pero no comprueba si la coincidencia ya existe, así que estoy tratando de usarfindOrCreate aquí.

models.Match.findOrCreate({
    include: [ {model: models.Summoner, as: 'Participants'}],
    where: { matchId: matchInfo.matchId, server: matchInfo.server },
    defaults: {
        matchMode: queueType,
        matchDate: new Date(matchCreation),
        matchDuration: matchDurationInSeconds,
        rankedBoo: rankedBoo
        }
    }).spread(function(match, created) {
        console.log(created)
});

Esto casi hace el truco (crea una nueva fila en la tabla de coincidencias, pero no en SummonerMatch). ¿Cómo procedería para insertar información en SummonerMatch también? Intenté algunas cosas (agregar atributos a los valores predeterminados, cambiarlo a una matriz, ajustar con la inclusión, pero hasta ahora no ha tenido éxito.

Estoy perdiendo algo, pero no puedo entender qué. Cualquier ayuda es muy apreciada :)

[EDITAR] En caso de que alguien venga a buscar respuestas sobre cómo hacerlo, esto funciona, pero no estoy seguro de si es el mejor enfoque:

models.Match.findOrCreate({
    include: [ {model: models.Summoner, as: 'Participants'}],
    where: { matchId: matchInfo.matchId, server: matchInfo.server },
    defaults: {
        matchMode: queueType,
        matchDate: new Date(matchCreation),
        matchDuration: matchDurationInSeconds,
        rankedBoo: rankedBoo
        }
    }).spread(function(match, created) {
        match.addParticipant(summoner, matchDetails).then(
            function () {
                console.log('Done')
            }
        )
});

Está creando una coincidencia si no existe, y luego agrega un participante. ¿No hay una manera de hacerlo todo de una vez?

Respuestas a la pregunta(0)

Su respuesta a la pregunta