This is the sweet spot: when MongoDB is on a dev VPS and you're building a small product around it. Most devs don't have to worry about the next step.
Then you push everything live. If you're lucky enough to get any real traffic, everything other than 99% read crumbles. You scramble to shard but realize that sharding just doesn't work well, and is incredibly complicated to set up.
Then you start losing data...because the drivers are programmed to not fucking check if the data you sent was actually written (yes, I know, this is fixed). Ok, you set your driver on your flopping app to validate writes, and BAM there goes 80% of the write performance 10gen promised you.
The solution? Just add more shards!! Ok, so now I have 4 shards, each with 3 repsets + 3 config servers. 4 * 3 + 3 = 15. Fifteen servers to handle what one MySQL server could do in its sleep.
Conclusion: MongoDB is terrific as a write-only, developer friendly database that you will never have to scale, ever.
Any wrapper would likely be worse than just keeping MongoDB.
We have the exact same issues with Mongo-specific queries. Even worse, our indexing regime (because we store relational data in Mongo) demands that we stick with Mongo 1.8, so all the comparative goodness of 2.x is lost.
And just this week, it was determined that there won't be any migration from Mongo to something-SQL in the near future, because it'd be too risky to attempt to translate a schema that's half foreign keys, half embedded JSON.
[1] http://tebros.com/2011/07/using-mongodb-mapreduce-to-join-2-...
I can understand calling something that holds your data and makes it so you don't have to do JOINs a database.
I can understand calling something that holds your data and does JOINs for you a database.
I'm having trouble calling something that holds my data and makes it so I have to "JOIN in my application" anything but a file system.
What do you gain with a native, high-resolution datatime type?
1. Oracle
2. SQL Server
3. MongoDB