It means they qualify for the last 16 as group winners, with PSG also officially through in second place.
The hosts very nearly took the lead after five minutes. Rodri’s header looped over Keylor Navas, but Presnel Kimpembe was on the line to head it away.
PSG couldn’t live with City’s pressing, and Achraf Hakimi had to head off the line to prevent Riyad Mahrez’s curling effort from finding the back of the net.
Oleksandr Zinchenko had an effort brilliantly blocked before Ilkay Gundogan hit the post, as the visitors somehow held on.
They almost punished City right at the end of the half, with Mbappe played in on the break, but his effort when through on goal was high and wide.
The sucker-punch did come in the second-half though. Neymar was involved, before Lionel Messi’s ball into the box came to Mbappe and he fired a shot through the legs of Ederson to put PSG in front after 50 minutes.
City got their equaliser though, and it came just after the hour mark.
Rodri clipped it wide to Kyle Walker, and his ball into the box was poked home from close range by Sterling.
And with 15 minutes they took the lead they more than deserved.
Mahrez curled a cross to the far post, where Bernardo Silva beautifully cushioned it into the path of Jesus. The Brazilian opened his body, and finished it past Navas.
PSG were unable to put on any real pressure in the closing stages, as Pep Guardiola’s side held on for a result their performance more than justified.