City came from behind to win in a meeting between the free-scoring, unbeaten top sides in the Premier League and Serie A.
The hosts were on top for the first 30 minutes and deservedly led when Lorenzo Insigne played an excellent one-two with Dries Mertens and steered the ball past Ederson.
City started to see more of the ball after Napoli’s blistering start and were level when Nicolas Otamendi headed in a cross from Ilkay Gundogan – a surprising selection in the starting 11.
They led when John Stones headed in off the underside of the crossbar for his third Champions League goal this season – matching Lionel Messi’s haul.
Napoli – now in danger of dropping out of the Champions League – stepped up the intensity again and Insigne hit the crossbar from 20 yards.
As the game ebbed and flowed, they equalised when Leroy Sane fouled Raul Albiol and Jorginho sent Ederson the wrong way from the penalty.
But there were more big moments to come – the ball broke to Aguero, who guided the ball home from the edge of the box. His 178th City goal took him above Eric Brook’s long-standing club record.
The final stages were comfortable for City and the excellent Raheem Sterling crashed home a fourth goal from Kevin de Bruyne’s pass in injury time.
Maurizio Sarri’s hosts are now six points behind second-placed Shakhtar Donetsk, who beat Feyenoord 3-1, with two games left in Group F.