Bangladesh posted a respectable 269 for eight in their 50 overs on a flat wicket with the potential for runs and then put a stranglehold on their hosts, who were bowled out for 148 in 32.1 overs.
Ziaur Rahman produced a man of the match performance with the ball after Nasir Hosain had anchored Bangladesh's innings with a sparkling knock of 68.
Two early wickets saw Zimbabwe teeter at the start of their reply before Hamilton Masakadza and captain Brendan Taylor looked to be steadying the innings. But after a 65-run partnership, Taylor's dismissal set in motion a steady fall of wickets.
Ziaur Rahman, whose average in the international game was 100 before the match, handed Bangladesh the impetus by trapping opener Masakadza plumb in front for 38 with the first ball of his fourth over and took out the off stump of the experienced Elton Chigumbura just three balls later.
He then had Prosper Utseya caught as Zimbabwe collapsed from 93 for three to 93 for seven, leaving their chase in tatters.
Malcolm Waller and Tinashe Panyangara also succumbed to Ziaur Rahman as the hosts stumbled towards defeat.
Bangladesh also suffered a mid-innings wobble before Nasir Hosain led the fightback by scoring 68 off 67 balls.
A late cameo from Mahmudullah, who hit 36 off 38 balls, helped push up the score as did some loose bowling from Zimbabwe, who conceded 36 extras, including 18 wides.
Shingi Masakadza claimed four wickets for Zimbabwe.
Shafiul Islam became the first bowler to be no balled in international cricket for knocking over the stumps at the non striker's end after the new rule came into effect on May 1.
The second ODI is also at the Queens Sports Club on Sunday with the third and last in the series to follow on Wednesday.