While this is a very nifty bit of code, I'd be very careful about using it for unit testing as there is a high likelihood of minor behavior differences verses a real mongod which can cause surprises in production.
Also, for anyone looking to embed MongoDB and who doesn't mind using C++ it is possible and rather easy. In fact some of our unit tests and all of our tools other than the shell already do this. See https://github.com/mongodb/mongo/blob/master/tools/tool.cpp#... for the details. The DBDirectClient class implements the full C++ driver interface but does all operations in-process. The downside is that unlike when using our drivers (which have no licensing impact on your code) when you embed mongodb within your application it becomes bound by AGPL.
PS- That is really impressive for a weekend project! You should get in touch with us at 10gen if you're looking for a new job.
> While this is a very nifty bit of code, I'd be very careful about using it for unit testing as there is a high likelihood of minor behavior differences verses a real mongod which can cause surprises in production.
Yep, that's a valid point. My plan is to run my tests most of the time with embedded-mongo, and run against real mongo on occasion (such as say, using embedded-mongo while developing locally and real mongo before pushing to production). I haven't benchmarked it yet, but my test suite seems to run a lot faster with embedded-mongo than real mongo. And it's definitely a lot less work to use than an ad-hoc mock layer.
> PS- That is really impressive for a weekend project! You should get in touch with us at 10gen if you're looking for a new job.
Thanks! If my current startup goes down in flames, I'll be sure to give you a call :).
Looks great! But the stinger is in the tail : "I think the next thing to add is indexes. Currently everything works
via a linear scan of the database."
It depends on what you use it for. Without indexes, it could be used for testing without setting up a local MongoDB server, as long as there aren't too many records.
Thanks. Re: indexes - patches welcome :). I don't expect them to be hard to build though. Since embedded-mongo is in memory, they're just a bunch of hash tables.
This seems really fun. I'd love to be able to use this almost like a version of SQLlite, but a JSON interface.
I could see this in Android/iPhone, as well as Desktop apps.
CouchDB already has embeddable ports to Android and iOS, and it has the added benefit of a built in master-slave or multiple-master replication system, so you can have your app get and push up to date data from a server when a connection is available, but still be fully functional without it, for free!
Also, for anyone looking to embed MongoDB and who doesn't mind using C++ it is possible and rather easy. In fact some of our unit tests and all of our tools other than the shell already do this. See https://github.com/mongodb/mongo/blob/master/tools/tool.cpp#... for the details. The DBDirectClient class implements the full C++ driver interface but does all operations in-process. The downside is that unlike when using our drivers (which have no licensing impact on your code) when you embed mongodb within your application it becomes bound by AGPL.
PS- That is really impressive for a weekend project! You should get in touch with us at 10gen if you're looking for a new job.