Rodrygo’s first ever Champions League goal four minutes in was followed by his second three minutes later, but Sergio Ramos denied the 18-year-old a quick-fire hat-trick when sending in a Panenka penalty in the 14th minute.
Karim Benzema scored Real’s fourth before half-time, and after the Frenchman got his second with 10 minutes to go, Rodrygo eventually completed his perfect hat-trick in injury time.
Meanwhile, Paris Saint-Germain did confirm their place in the last 16, maintaining their perfect start with a 1-0 win over Club Brugge.
PSG played the match without Neymar – who has now played 63 games and missed 64 since joining the club – and in his absence it was Mauro Icardi who put the French champions ahead, and that proved to be the winning goal.
Group B: Bayern into last 16, Spurs impress away
Read the full reports below as Bayern Munich sealed their place in the last 16 and Tottenham cruised to victory in Belgrade.
After Juventus booked their spot in the last 16 with a last-gasp victory in Russia (see report above), Atletico Madrid were made to wait after losing 2-1 at Bayer Leverkusen.
A Thomas Partey own goal put the Germans ahead before the break, with Kevin Volland scoring their second to keep their slim hopes of qualification alive. Alvaro Morata's late goal was a mere consolation for Atletico.
With two games to go, Atleti are second, three points behind Juve and four ahead of both Leverkusen and Lokomotiv Moscow.