Mongoid::Atomic¶ ↑
Atomic updates for your Mongoid models.
Installation¶ ↑
Add to Gemfile:
gem 'mongoid_atomic'
Getting Started¶ ↑
Include the module in models where you want it:
class User include Mongoid::Document include Mongoid::Atomic field :username field :groups, :type => Array, :default => ['users'] field :post_count, :type => Integer end
Easy and Human Readable Atomic Updates!¶ ↑
A simple example. To increment a post count:
u = User.where(:name => 'Bill').first u.atomic_inc(:post_count)
.. which might fit nicely in your Post model:
class Post include Mongoid::Document ... references_one :user ... after_create :update_post_count ... private def update_post_count self.user.atomic_inc :post_count end end
.. or join a group:
... u.atomic_push(:groups, 'posters')
.. or remove a field:
... u.atomic_unset(:deprecated_field)
.. or change your name:
... u.atomic_set(:username, 'bill')
.. or do all of it at once:
... u.atomic_update :inc => {:post_count => 1}, :set => {:username => 'bobby'}, :pushAll => {:groups => %w[rubyists developers]}
A Note About Attribute Consistency¶ ↑
No effort is made to ensure consistency between the server and instance attributes. There’s a good reason for this: the operations are performed inside of the Mongo server and we often don’t care about the result. If you need to ensure the consistency of your attributes after an update, call the Mongoid reload method. Example:
>> u = User.first => #<User....> >> u.post_count => 0 >> u.atomic_inc :post_count => nil >> u.post_count => 0 >> u.reload => #<User....> >> u.post_count >= 1