Module: Mongoid::Persistable::Pullable

Extended by:
ActiveSupport::Concern
Included in:
Mongoid::Persistable
Defined in:
lib/mongoid/persistable/pullable.rb

Overview

Defines behavior for $pull and $pullAll operations.

Instance Method Summary collapse

Instance Method Details

#pull(pulls) ⇒ Document

Note:

If duplicate values are found they will all be pulled.

Pull single values from the provided arrays.

Examples:

Pull a value from the array.

document.pull(names: "Jeff", levels: 5)

Parameters:

  • pulls (Hash)

    The field/value pull pairs.

Returns:



21
22
23
24
25
26
27
28
29
# File 'lib/mongoid/persistable/pullable.rb', line 21

def pull(pulls)
  prepare_atomic_operation do |ops|
    process_atomic_operations(pulls) do |field, value|
      (send(field) || []).delete(value)
      ops[atomic_attribute_name(field)] = value
    end
    { "$pull" => ops }
  end
end

#pull_all(pulls) ⇒ Document

Pull multiple values from the provided array fields.

Examples:

Pull values from the arrays.

document.pull_all(names: [ "Jeff", "Bob" ], levels: [ 5, 6 ])

Parameters:

  • pulls (Hash)

    The pull all operations.

Returns:



39
40
41
42
43
44
45
46
47
48
# File 'lib/mongoid/persistable/pullable.rb', line 39

def pull_all(pulls)
  prepare_atomic_operation do |ops|
    process_atomic_operations(pulls) do |field, value|
      existing = send(field) || []
      value.each{ |val| existing.delete(val) }
      ops[atomic_attribute_name(field)] = value
    end
    { "$pullAll" => ops }
  end
end