Brazilian teenager Rodrygo plundered a hat-trick as Real Madrid trounced Galatasaray 6-0 to ease their way towards the Champions League knockout phase.
The 18-year-old former Santos striker scored twice within the opening seven minutes at the Bernabeu Stadium and completed his treble in stoppage time to cap a fine evening's work.
In addition, he had earlier set up Karim Benzema to score the first of his two goals after skipper Sergio Ramos had converted from the penalty spot.
Benzema's second was his 50th goal for the club in the competition and helped set up a showdown with Group A leaders Paris St Germain in Spain in three weeks' time.
The French side will head into the game five points better off than their hosts, but knowing Zinedine Zidane's men have put a slow start to their European campaign firmly behind them.
Mauro Icardi was again in the right place at the right time to earn PSG a 1-0 home victory over Club Brugge, who failed to convert a second-half penalty.
Icardi was preferred up front to Edinson Cavani alongside Angel Di Maria and Kylian Mbappe, and the Argentine forward struck in the 22nd minute, tapping in from Colin Dagba's cross.
Now unbeaten in their last 23 group home games in the competition, PSG showed little in the second half as the visitors pressed hard for an equaliser but Keylor Navas made sure the Ligue 1 side kept their perfect defensive record in the group.
Brugge were awarded a penalty in the 76th minute after Thiago Silva brought down Mbaye Diagne in the area, only for Navas to block the Senegalese's spot-kick.
While Icardi had another night to remember, Mbappe, who scored a hat-trick in the reverse fixture, proved clumsy throughout and was replaced by Julian Draxler seven minutes from time.
Substitute Douglas Costa scored a brilliant stoppage-time goal to give Juventus a 2-1 win away to Lokomotiv Moscow on Wednesday, which clinched their place in the Champions League round of 16 with two games to spare.
Juventus went ahead when Lokomotiv goalkeeper Guilherme allowed Cristiano Ronaldo's powerful free-kick to squirm through his legs and Aaron Ramsey touched the ball over the line after four minutes.
Aleksei Miranchuk levelled eight minutes later for the Railwayman, scoring from the rebound after his own header hit the post. The game was heading for a draw until Costa played a one-two with Gonzalo Higuain, raced into the area and poked the ball past Guilherme.
Bayer Leverkusen sprang to life as they picked up their first points with a 2-1 win over Atletico Madrid in a bad-tempered game.
Despite suffering a late fright and red card, Leverkusen were worthy winners and must have left their supporters wondering why they could not have produced similar displays earlier in the group.
Atletico would have clinched their place in the last 16 with a win but failed to produce a single shot on target in the first half and fell behind to an own goal by Thomas Partey four minutes before the break.
Charles Aranguiz lofted the ball over from the right and the Ghanaian headed into his own net as he tried to clear.
Leverkusen extended their lead 10 minutes after the break. Karim Bellarabi fired over a low cross from the right, Felipe failed to cut it out and Kevin Volland controlled the ball and drilled his shot past Jan Oblak.
There were ugly moments after that and, at one point, a huge scuffle broke out in the Atletico area involving around a dozen players which led to four players being booked.
Shortly afterwards, Leverkusen had Nadiem Amiri sent off for a late, sliding tackle, leaving the Bundesliga side to play the last six minutes with 10 men.
Alvaro Morata pulled one back in the fourth minute of stoppage time but it was to prove a mere consolation.
Bayern Munich also clinched their place in the last 16 by beating Olympiakos 2-0 at home thanks to second-half strikes from Robert Lewandowski and Ivan Perisic.
Playing their first game since coach Niko Kovac was sacked after the humiliating 5-1 drubbing at Eintracht Frankfurt, Bayern out-played the Greek champions and Lewandowski finally broke the deadlock in the 69th minute.
The Polish striker prodded home a cross from Kingsley Coman from close range to score his 21st goal of the season in all competitions and set interim boss Hansi Flick on the way to victory in his first game since being put in temporary charge.
Croatian winger Perisic slammed the ball home with his first touch less than 60 seconds after coming off the bench to seal the win.
? 13' Dinamo Zagreb 0-1 Shakhtar— UEFA Champions League (@ChampionsLeague) November 6, 2019
? 25' Dinamo Zagreb 1-1 Shakhtar
? 83' Dinamo Zagreb 2-1 Shakhtar
? 89' Dinamo Zagreb 3-1 Shakhtar
? 90+3 Dinamo Zagreb 3-2 Shakhtar
? 90+8 Dinamo Zagreb 3-3 Shakhtar
What. A. Game! Drama in the #UCL ?????? pic.twitter.com/8Avi5RySyL
Shakhtar Donetsk scored twice in injury time, the second a penalty converted in the eighth minute of stoppage time, to force a dramatic 3-3 draw away to Dinamo Zagreb after both teams finished with 10 men.
Alan Patrick gave Shakhtar a 13th minute lead and Bruno Petkovic replied to make it 1-1 at half-time but the real drama came in the second half.
Dinamo had Nikola Moro sent off for a second bookable offence in the 73rd minute but, instead of exploiting that advantage, their Ukrainian opponents then had Marlos dismissed, also for two yellow cards, six minutes later.
Petkovic cleverly laid the ball off for Luka Ivanusec to put Dinamo ahead in the 83rd minute and the Croatian champions thought they had won it when Arijan Ademi tapped in Dani Olmo's cross six minutes later.
The visitors had other ideas and Junior Moraes headed in Viktor Kovalenko's cross in the third minute of stoppage time before a penalty was awarded for a foul by Kevin Theophile-Catherine on Shakhtar goalkeeper Andriy Pyatov, who had come up for a corner.
Tete converted to complete an extraordinary finish and leave the two sides level with five points from four games.