Patrick Bamford squandered a golden opportunity for the Dons in the opening three minutes.
And it proved a key moment as Colchester took a 20th-minute lead.
After Tom Eastman had helped on Ryan Dickson’s long throw into the area, Craig Eastmond’s first-time drive from the edge of the area went in off a post.
And the U’s doubled their lead just before half-time when Jordan Spence fluffed Luke Garbutt’s long punt forward and Jabo Ibehre beat goalkeeper Ian McLoughlin and tapped into the empty net.
Magnus Okuonghae missed a good chance for Colchester early in the second half.
And the Dons reduced the deficit 10 minutes after half-time when Spence nodded in from a corner, seconds after Sam Walker had brilliantly denied substitute Daniel Powell.
But Colchester sub Macauley Bonne wrapped up the win with 12 minutes to go with a fine left-foot strike which flew inside the near post.