About Mongoid::CachedDocument

Mongoid is an ODM (Object-Document-Mapper) framework for MongoDB in Ruby. Mongoid::CachedDocument adds a new field type of the same name that supports the caching attributes from a related document.

Example

class User
  include Mongoid::Document
  
  field :login
  #...
end

class Post
  include Mongoid::Document
  
  field :title
  field :body
  field :author, :type => Mongoid::CachedDocument
end

Assuming @user is a valid User with an id of 42 and login of 'jsmith':

@post = Post.create(:title => 'First Post', :body => 'This is a post.', :author => @user)

This will create a new Post document, with an author field, the content of which is a hash:

{ '_type' => 'User', '_id' = 42 }

@post.author._type
=> 'User'
@post.author._id
=> 42

Attempting to get the user's login will cause the real user document to be fetched from the collection, which replaces the cached values.

class User
#...

def cachable_attributes
  [ :login ]
end
end

With the above class definition, the cached attributes will be:

{ '_type' => 'User', '_id' = 42, 'login' => 'jsmith' }

To use the above in a criteria:

Post.criteria.where('author.login' => 'jsmith')

Enjoy!

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 (c) 2010 Matthew Gibbons. See LICENSE for details.