モジュール: Mongoid::関連付け::埋め込み::バッチ可能
- 次のことが含まれます。
- 位置
- 次のドキュメントに含まれます。
- InsertMany::Proxy
- 定義:
- build/mongoid- 8.1 /lib/mongoid/asaction/ embedded/batchable.rb
Overview
埋め込みドキュメントに対してバッチで操作を実行するための動作を含みます。
インスタンス メソッドの概要を折りたたむ
-
#batch_client ( Docs ) = 配列
関連付けから 1 回のスワップですべてのDocsをクリアします。
-
#batch_insert(docs) ⇒ Array<Hash>
新しいドキュメントをバッチ プッシュとして挿入します($push と $each)。
-
#batch_remove ( Docs 、メソッド = :delete)= : オブジェクト
提供されたドキュメントを $pullAll または $pull としてバッチで削除します。
-
# Batch_replace (Docs ) = Array[Hash]<Hash>
提供されたドキュメントを $set としてバッチ置き換えます。
位置から含まれるメソッド
インスタンス メソッドの詳細
#batch_client ( Docs ) =配列
関連付けから 1 回のスワップですべてのDocsをクリアします。
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
ファイル 'Build/mongoid- 8.1 /lib/mongoid/as associated/ embedded/batchable.rb '、 行34 デフォルト batch_client(docs) pre_process_batch_remove(docs, :delete) ただし、 docs.空の場合 コレクション.find(セレクター).update_one( 位置的に(セレクター, " $unset " => { path => true }), セッション: _session ) ただし、 Mongoid.broken_updates # これにより、ユーザーが を設定、クリア、リセットする問題が解決されます。 # 埋め込みドキュメント。 以前は、埋め込みドキュメントは すでに「new_record」ではマークされていない場合は、永続化されません # 2 回目。 この変更により が修正され、それが永続化されるようになります。 docs.各 { |doc| doc.new_record = true } end post_process_batch_remove(docs, :delete) end _unscoped.クリア end |
#batch_insert(docs) ⇒ Array<Hash>
新しいドキュメントをバッチ プッシュとして挿入します($push と $each)。 これにより、すべてのコールバックが適切な時間に実行され、データベースには1リクエストのみが送信されます。
22 23 24 |
ファイル 'Build/mongoid- 8.1 /lib/mongoid/as associated/ embedded/batchable.rb '、 行22 デフォルト batch_insert(docs) execution_batch_push(docs) end |
#batch_remove ( Docs 、メソッド = :delete)= :オブジェクト
提供されたドキュメントを $pullAll または $pull としてバッチで削除します。
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
ファイル 'Build/mongoid- 8.1 /lib/mongoid/as associated/ embedded/batchable.rb '、 行60 デフォルト batch_remove(docs, メソッド = :delete) _id が nil の場合、$pull と削除を使用して を検索することはできません # ID を指定します。 したがって、ドキュメントの # 属性。 transformations = pre_process_batch_remove(docs, メソッド) プル, pull_alls = transformations.パーティション { |o| !o[" _id "].nil? } 場合 !_base.永続化された場合 post_process_batch_remove(docs, メソッド) ただし、 docs.空の場合 return reindex end 場合 !docs.空の場合 場合 !プル.空の場合 コレクション.find(セレクター).update_one( 位置的に(セレクター, " $pull " => { path => { " _id " => { " $in " => プル.プル型(" _id ") } } }), セッション: _session ) end 場合 !pull_alls.空の場合 コレクション.find(セレクター).update_one( 位置的に(セレクター, " $pullAll " => { path => pull_alls }), セッション: _session ) end post_process_batch_remove(docs, メソッド) else コレクション.find(セレクター).update_one( 位置的に(セレクター, " $set " => { path => [] }), セッション: _session ) end reindex end |
# Batch_replace (Docs ) = Array[Hash ]<Hash>
提供されたドキュメントを $set としてバッチ置き換えます。
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
ファイル 'Build/mongoid- 8.1 /lib/mongoid/as associated/ embedded/batchable.rb '、 行103 デフォルト batch_replace(docs) 場合 docs.blank? 場合 _assigning? & & !空の場合 _base.Delay_アトミック_セット.削除(path) clear_アトミック_パス_キャッシュ _base.add_アトミック_unset(最初に) target_duplicate = _ target.dup pre_process_batch_remove(target_duplicate, :delete) post_process_batch_remove(target_duplicate, :delete) else batch_remove(_ target.dup) end elsif _ target != docs _base.Delay_アトミック_セット.削除(path) ただし、 _assigning? docs = Normalize_docs(docs).compact _ target.クリア および _unscoped.クリア _base.Delay_アトミック_unsets.削除(path) clear_アトミック_パス_キャッシュ inserts = execution_batch_set(docs) add_aごとのセット(inserts) end end |