モジュール: Mongoid::関連付け::埋め込み::バッチ可能

次のことが含まれます。
位置
次のドキュメントに含まれます。
InsertMany::Proxy
定義:
lib/mongoid/関連付け/ embedded/batchable.rb

Overview

埋め込みドキュメントに対してバッチで操作を実行するための動作を含みます。

インスタンス メソッドの概要を折りたたむ

位置から含まれるメソッド

位置的に

インスタンス メソッドの詳細

#batch_client ( Docs ) =配列

関連付けから 1 回のスワップですべてのDocsをクリアします。

例:

すべてのDocsをクリアします。

batchable.batch_clear(docs)

パラメーター:

次の値を返します。

  • (配列) —

    空の配列。



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# ファイル 'lib/mongoid/関連付け/埋め込み/batchable.rb' は、 33行

デフォルト batch_client(docs)
  pre_process_batch_remove(docs, :delete)
  ただし、 docs.空の場合
    コレクション.find(セレクター).update_one(
      位置的に(セレクター, '$unset' => { path => true }),
      セッション: _session
    )
    # これにより、ユーザーが を設定、クリア、リセットする問題が解決されます。
    # 埋め込みドキュメント。 以前は、埋め込みドキュメントは
    すでに「new_record」ではマークされていない場合は、永続化されません
    # 2 回目。 この変更により が修正され、それが永続化されるようになります。
    docs.各 { |doc| doc.new_record = true }
    post_process_batch_remove(docs, :delete)
  end
  _unscoped.クリア
end

#batch_insert(docs) ⇒ Array<Hash>

新しいドキュメントをバッチ プッシュとして挿入します($push と $each)。 これにより、すべてのコールバックが適切な時間に実行され、データベースには1リクエストのみが送信されます。

例:

バッチ プッシュを実行します。

batchable.batch_insert([ doc_one, doc_two ])

パラメーター:

次の値を返します。

  • ( <Hash>配列 ) —

    挿入。



21
22
23
# ファイル 'lib/mongoid/関連付け/埋め込み/batchable.rb' は、 21行

デフォルト batch_insert(docs)
  execution_batch_push(docs)
end

#batch_remove ( Docs 、メソッド = :delete)= :オブジェクト

提供されたドキュメントを $pullAll または $pull としてバッチで削除します。

例:

ドキュメントをバッチで削除します。

batchable.batch_remove([ doc_one, doc_two ])

パラメーター:

  • docs (配列 <ドキュメント> ) —

    削除するDocs 。

  • メソッド (記号) (デフォルトは:delete ) —

    削除または破棄します。



57
58
59
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
# ファイル 'lib/mongoid/関連付け/埋め込み/batchable.rb' は、 57行

デフォルト 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(
      位置的に(セレクター, '$set' => { path => [] }),
      セッション: _session
    )
  else
    ただし、 プル.空の場合
      コレクション.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, メソッド)
  end
  reindex
end

# Batch_replace (Docs ) = Array[Hash ]<Hash>

提供されたドキュメントを $set としてバッチ置き換えます。

例:

ドキュメントをバッチで置き換えます。

batchable.batch_replace([ doc_one, doc_two ])

パラメーター:

  • docs ( 配列 は Document > | 配列 は )<Hash> ) —

    置き換えDocs 。

次の値を返します。

  • ( <Hash>配列 ) —

    挿入。



100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# ファイル 'lib/mongoid/関連付け/埋め込み/batchable.rb' は、 100行

デフォルト 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