Atomic modifiers
Atomic modifiers are those that modify the fields in an atomic operation. We saw an example of this in the earlier chapter with :counter_cache
, which atomically increments or decrements the value of a field.
While it's easy to manipulate fields in a document, how about if we want to atomically find or modify documents? In SQL, we have INSERT ON DUPLICATE KEY UPDATE
and this is called an upsert. Similarly, MongoDB also supports upserts. We have already seen methods, such as :find_and_create
and :find_and_initialize
. Now, we will see :find_and_modify
.
find_and_modify
As the name suggests, we find and modify in a single atomic operation. This is useful in various scenarios where we want to compare and set in a single operation. For example, a Job
queue, where a worker processes is supposed to pick up a job and execute them. It's important that only one worker picks up a job. Suppose we have a job class as follows:
class Job include Mongoid::Document field :name field :status...