Monger, a modern Clojure MongoDB Driver
Monger is an idiomatic Clojure MongoDB driver for a more civilized age.
It has batteries included, offers powerful expressive query DSL, strives to support every MongoDB 2.0+ feature and . Monger is built from the ground up for Clojure 1.3+ and sits on top of the official MongoDB Java driver.
There is one MongoDB client for Clojure that has been around since 2009. So, why create another one? Monger authors wanted a client that will
- Support most of MongoDB 2.0+ features but only those that really matter. Grouping the way it is done today, for example, does not (it is easier to just use Map/Reduce directly).
- Be well documented.
- Be well tested.
- Be maintained, do not carry technical debt from 2009 forever.
- Target Clojure 1.3.0 and later from the ground up.
- Integrate with libraries like clojure.data.json and Joda Time.
- Provide support for unit testing: factories/fixtures DSL, collection cleaner functions, clojure.test integration and so on.
- Support URI connections to be friendly to Heroku and other PaaS providers.
- Learn from other clients like the Java and Ruby ones.
Monger has a mailing list. Feel free to join it and ask any questions you may have.
To subscribe for announcements of releases, important changes and so on, please follow @ClojureWerkz on Twitter.
Monger is no longer a really young project: it will be 1 year old in a few months, with active production use from week 1. It is now rapidly approaching the RC1 milestone and almost all API parts are set in stone for the 1.0 release. That said, the team takes a pretty conservative stance on versioning and there will be as many beta releases as necessary to get things right.
RC1 is something we believe is worth labelling 1.0 when most of documentation guides are ready.
The Most Recent Release
<dependency> <groupId>com.novemberain</groupId> <artifactId>monger</artifactId> <version>1.0.0-beta7</version> </dependency>
If you are comfortable with using snapshots, snapshot artifacts are released to Clojars every 24 hours.
<dependency> <groupId>com.novemberain</groupId> <artifactId>monger</artifactId> <version>1.0.0-SNAPSHOT</version> </dependency>
Documentation & Examples
Supported Clojure versions
Monger is built from the ground up for Clojure 1.3 and up.
Continuous Integration Status
Monger insert operations are efficient and have very little overhead compared to the underlying Java driver. Here are some numbers on a MacBook Pro from fall 2010 with Core i7 and an Intel SSD drive:
Testing monger.test.stress Inserting 1000 documents... "Elapsed time: 25.699 msecs" Inserting 10000 documents... "Elapsed time: 135.069 msecs" Inserting 100000 documents... "Elapsed time: 515.969 msecs"
SAFE write concern, it takes roughly 0.5 second to insert 100,000 documents with Clojure 1.3.0.
Monger Is a ClojureWerkz Project
Monger uses Leiningen 2. Make sure you have it installed and then run tests against supported Clojure versions using
lein2 all test
Then create a branch and make your changes on it. Once you are done with your changes and all tests pass, submit a pull request on Github.
Copyright (C) 2011-2012 Michael S. Klishin
Distributed under the Eclipse Public License, the same as Clojure.