Создаёте в модели League
seasonId: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Season' }]
Создаёте в модели Season
matchId: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Match' }]
Создаёте Лигу -
leagueModel.create(leagueData)
Создаёте Сезон -
seasonModel.create(seasonData)
После создания сезона апдейтите нужную лигу, добавляя ей id созданного сезона -
leagueModel.updateOne({ _id: leagueId }, { $push: { seasonId: inputSeasonId } })
Чтобы получить список сезонов в лиге, делаете
leagueModel.findById(leagueId).populate('seasonId')
Это связь Лиги с Сезонами. Аналогично делаете связь Сезона с матчами.
Как-то так. Особо в подробности не вдавался, но должно быть понятно.