> hide :27017 behind a firewall with only your app's DB access layer talking to it?
Because if you can do without it, why bother? Developing an access layer costs time and money. If you can leverage the DB features to do what you need, you can make you stack simpler and more maintainable.