DataMapper MongoDB Adapter


The adapter is going through a major re-work as DataMapper will soon support EmbeddedValue (see: and the adapter will significantly benefit from that fact as there won't be a need to hack around DM's private API like it used to be. Apart from embedded docs support there's plenty of work that needs to be done around MongoDB's modifier operators ( With these things done we can start thinking about releasing 1.0.

Contributors are most welcome! In case of any questions you can find me on #datamapper IRC channel.


Useful links:


Ruby gems

  • dm-core ~> 1.3.0.beta

  • dm-aggregates ~> 1.3.0.beta

  • dm-migrations ~> 1.2.0.beta

  • mongo ~> 1.5.0

  • mongodb ~> 2.0.0 (This gem is only tested against this version)


gem install dm-mongo-adapter


  :adapter  => 'mongo',
  :database => 'my_mongo_db',

# Define resources
class Student
  include DataMapper::Mongo::Resource

  property :id, ObjectId
  property :name, String
  property :age, Integer

class Course
  include DataMapper::Mongo::Resource

  property :id, ObjectId
  property :name, String

# No need to (auto_)migrate!
biology = Course.create(:name => "Biology")
english = Course.create(:name => "English")

# Queries
Student.all(:age.gte => 20, :name => /oh/, :limit => 20, :order => [:age.asc])

# Array and Hash as a property
class Zoo
  include DataMapper::Mongo::Resource

  property :id, ObjectId
  property :opening_hours, Hash
  property :animals, Array

  :opening_hours => { :weekend => '9am-8pm', :weekdays => '11am-8pm' },
  :animals       => [ "Marty", "Alex", "Gloria" ])

Zoo.all(:animals => 'Alex')

DataMapper plugins

Currently the adapter is known to work with:

  1. dm-timestamps

  2. dm-validations

  3. dm-aggregates

  4. dm-pager

  5. dm-serializer

  6. dm-types

  7. dm-is-tree

and expect more of course :)

Authors and contributors

The adapter has been originally written by Shane Hanna (shanna). Project is currently maintained by Piotr Solnica (solnic).


  • Anthony Williams (antw)

  • Lance Carlson (lancecarlson)

  • Markus Schirp (mbj)

Note on Patches/Pull Requests

  • Fork the project.

  • Make your feature addition or bug fix.

  • Add tests for it. This is important so I don't break it in a future version unintentionally.

  • Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)

  • Send me a pull request. Bonus points for topic branches.

Copyright © 2009 “Shane Hanna”, 2009-2010 “Piotr Solnica”. See LICENSE for details.