Not only does creating a DSL make querying easy (particularly with complex conditions), but it also insulates your application from change in a few important ways. Especially in the initial, exploratory stages of a project, it is common to change and evolve a data schema, and NoSQL environments make this very simple. Using a DSL will shield your code from these changes; you only need to change the DSL “atoms” that the schema change affects.
In case you missed it, Foursquare open sourced they type-safe Scala DSL for MongoDB.
Original title and link: Creating a Query DSL Using Clojure and MongoDB ( ©myNoSQL)