You probably never installed 3.8.8 in the first place (which should be stable) but a 3.9.x version.
Actually, with the ^ you will also install 3.9.x when having ^3.8.8 in the package.json.
In your case, you can either fix the 3.8.8 (or 3.8.18 which is stable as of today, as described in other answer here, by removing the ^) or use th ~ character, which will only match new version on the lowermost version part.
So the following will match (with x being latest available):
* => x.x
^3.8.8 => 3.x
~3.8.8 => 3.8.x
3.8.8 => 3.8.8
Since 3.9 is considered unstable, but ^ will go to 3.9, that is the problem.
Good explanation on version is also found here: https://stackoverflow.com/a/22345808/586754
and use
npm view mongoose versions
to see what versions are available, e. g. what is latest in 3.8 on when 4 is out.
With ~3.8 it will always stay latest in 3.8 (on update), but you will need to update it manually once 4.0 is out.
Also: you can edit the package.json directly and then run
npm update
without having to uninstall/reinstall.