MongoDB is the most popular option in a new class of NoSQL databases. Unlike data stored in strictly defined databases like MySQL and PostgreSQL, MongoDB uses flexible data objects called documents. These JSON-like objects can be keyed and queried much like a standard database, but offer the ability to store new attributes that would require a data migration in traditional databases.
Like alternatives, MongoDB supports ACID compliant transactions and can be scaled to serve a large load using replication and load balancing.
We've found Mongo works really well in concert with traditional SQL databases as a linked store of additional information that may need queries, but which has already been referenced from the database. In this way, the database handles old-fashioned SQL queries without requiring lots of structural updates as new data elements come up (or having to store a JSON blob in a TEXT or CLOB field).
While many devs choose Mongo to make their programs' data structures store the same way in a database as they do in memory, Mongo is often misused due to lack of familiarity with the most effective ways of storing data; far too many developers drop JSON blobs into the database and then expect Mongo to be efficient in pulling the data back in when they query it. We've seen a few projects in which developers tried to reference Mongo documents together the way SQL would work, making it far less efficient than if they'd just used SQL in the first place. Mongo's best use is what it was designed for: Queryable, replicable document storage in which data structures may change over time.
Although early versions of MongoDB had some security concerns due to the default settings included with the server, updates have addressed these issues and a properly configured setup has always been secure.