To use single-quote syntax, you need to pass the string to the bash shell and expose your variables through env, e.g.
$ sudo env MDBAUTH="$MDBAUTH" MDBUSER="$MDBUSER" MDBPASSWORD="$MDBPASSWORD" \
bash -c 'mongo "$MDBAUTH" -u "$MDBUSER" -p "$MDBPASSWORD"'
Here are few other examples:
$ sudo -i env FOO=FOO BAR=BAR bash -c 'grep -e FOO -e BAR <(set)'
BAR=BAR
BASH_EXECUTION_STRING='grep -e FOO -e BAR <(set)'
FOO=FOO
SUDO_COMMAND='/bin/sh -c env FOO=FOO BAR=BAR bash -c grep\ -e\ FOO\ -e\ BAR\ <(set)'
$ sudo env FOO=FOO BAR=BAR bash -c 'echo $FOO $BAR'
FOO BAR
When using double quotes, you need these variables defined in your local shell (at the time when running the command), e.g.:
sudo -i mongo "$MDBAUTH" -u "$MDBUSER" -p "$MDBPASSWORD"
To see whether variables are defined and parsed correctly, prefix the whole command with echo. If the variables are empty, they need to be set first.