Module: Mongoid::Relations::Embedded::Batchable
- Included in:
- Many
- Defined in:
- lib/mongoid/relations/embedded/batchable.rb
Overview
Contains behaviour for executing operations in batch on embedded documents.
Instance Method Summary (collapse)
-
- (Array) batch_clear(docs)
Clear all of the docs out of the relation in a single swipe.
-
- (Array<Hash>) batch_insert(docs)
Insert new documents as a batch push ($pushAll).
-
- (Object) batch_remove(docs, method = :delete)
Batch remove the provided documents as a $pullAll.
-
- (Array<Hash>) batch_replace(docs)
Batch replace the provided documents as a $set.
Instance Method Details
- (Array) batch_clear(docs)
Clear all of the docs out of the relation in a single swipe.
36 37 38 39 40 41 42 43 |
# File 'lib/mongoid/relations/embedded/batchable.rb', line 36 def batch_clear(docs) pre_process_batch_remove(docs, :delete) unless docs.empty? collection.find(selector).update("$unset" => { path => true }) post_process_batch_remove(docs, :delete) end _unscoped.clear end |
- (Array<Hash>) batch_insert(docs)
Insert new documents as a batch push ($pushAll). This ensures that all callbacks are run at the appropriate time and only 1 request is made to the database.
22 23 24 |
# File 'lib/mongoid/relations/embedded/batchable.rb', line 22 def batch_insert(docs) execute_batch_insert(docs, "$pushAll") end |
- (Object) batch_remove(docs, method = :delete)
Batch remove the provided documents as a $pullAll.
54 55 56 57 58 59 60 61 62 |
# File 'lib/mongoid/relations/embedded/batchable.rb', line 54 def batch_remove(docs, method = :delete) removals = pre_process_batch_remove(docs, method) if !docs.empty? && !_assigning? collection.find(selector).update("$pullAll" => { path => removals }) post_process_batch_remove(docs, method) end Threaded. reindex end |
- (Array<Hash>) batch_replace(docs)
Batch replace the provided documents as a $set.
74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/mongoid/relations/embedded/batchable.rb', line 74 def batch_replace(docs) if docs.blank? if _assigning? && !empty? base.atomic_unsets.push(first.atomic_path) end batch_remove(target.dup) else base.delayed_atomic_sets.clear docs = normalize_docs(docs).compact target.clear and _unscoped.clear inserts = execute_batch_insert(docs, "$set") add_atomic_sets(inserts) end end |