My days of using Firebase are over! I want to move to something scalable and possibly less cheap. In the past seven days I have done my research on what type of DB best fits my needs, and have chosen to go with the nonrelational DB; MongoDB. Although I understand it, I need help understanding how to set up the architecture. I have the client app (Flutter/ Dart) that would make HTTP requests to the web server (node/express), and from there the webserver would query data from MongoDB.
How should I go about hosting the web server and MongoDb; do they have to be hosted together (this is where a lot of my confusion is)? Based on the research I've done, it seems like the standard practice would be to host on a VM provided by services such as Amazon Web Services, Google Cloud Platform, Microsoft Azure, etc. If there are better ways, such as possibly self-hosting (more responsibility), should I? Anyways, I just want to confirm with a community (you guys) to make sure I do this right, all input is highly appreciated.
Firstly, there's nothing wrong with Firebase for scalability, not can I see anything wrong with "cheap" - unless you expect to need the more complex tools that MongoDB offers (such as Map/Reduce, GridFS and such), I don't think you would want to pay more to get the same capabilities. That being said, there are advantages to move to an open-source code base that you have the option of hosting yourself - preventing vendor lock-in is a legitimate requirement.
Now, as for hosting MongoDB: there are a lot of providers that will host MongoDB (or compatible, see AWS DocumentDB) for you - AWS, Linode or Digital Ocean all offer managed database as a service, so you don't have to mess with VMs and installing and maintaining your own instance of the database server - they are often also cheaper than just running a VM. There's no need to co-locate the database near the application - all of those managed MongoDB services offer great connectivity so unless millisecond latency is critical for your application, any will do.
That being said, your best bet for starting to work with MongoDB is probably MongoDB's own Atlas service - it is a managed service provider that allows you to select in which cloud hosting provider to co-locate a managed MongoDB instance - they support AWS, Azure, GCP and others. They always have the latest and greatest MongoDB version (they make it themselves) and they even have a free tier for starting development on the cheap.
you can also use mongodb atlas, it is a dbaas, it also has shared clusters which are essentially free, good to start with. also are you planning to use an ORM( prisma or mongoose) or raw mongodb driver