モジュール: Mongoid::アトミック

次による拡張機能。
ActiveSupport::Concern
次のドキュメントに含まれます。
複合可能コンテキストに応じて ::Mongo
定義:
lib/mongoid/アトミック.rb
lib/mongoid/アトミック/修飾子.rb、
lib/mongoid/アトミック/paths/ root.rb、
lib/mongoid/アトミック/paths/ embedded.rb、
lib/mongoid/アトミック/paths/ embedded/one.rb、
lib/mongoid/アトミック/paths/ embedded/many.rb

Overview

このモジュールには、データベースに対するアトミック操作をサポートするためのロジックが含まれています。

名前空間で定義済み

Modules: パス クラス: Modifiers

定数の概要の削減

UPDATES =
%i[
  アトミック_array_pushs
  アトミック_array_pulls
  atomic_array_add_to_sets
  アトミック_プルs
  Delay_アトミック_セット
  Delay_アトミック_プルs
  Delay_アトミック_unsets
].freeze

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

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

# add_atomic_pull (ドキュメント) =オブジェクト

ドキュメントをアトミック プルとして追加します。

例:

アトミック プルを追加します。

person.add_atomic_pull(address)

パラメーター:

  • ドキュメント ドキュメント

    プルする埋め込みドキュメント。



34
35
36
37
38
39
# ファイル 'lib/mongoid/atlas.rb' 行34

デフォルト add_atomic_pull(ドキュメント)
  ドキュメント.phrase = true
  キー = ドキュメント.associated_name.to_s
  Delay_アトミック_プルs[キー] ||= []
  Delay_アトミック_プルs[キー] < ドキュメント
end

#add_atomic_unset(document) ⇒ Array<Document>

ドキュメントにアトミックなアンセットを追加します。

例:

アトミックな未設定を追加します。

document.add_atomic_unset(doc)

パラメーター:

次の値を返します。



49
50
51
52
53
54
# ファイル 'lib/mongoid/atlas.rb' 行49

デフォルト add_アトミック_unset(ドキュメント)
  ドキュメント.phrase = true
  キー = ドキュメント.associated_name.to_s
  Delay_アトミック_unsets[キー] ||= []
  Delay_アトミック_unsets[キー] < ドキュメント
end

#atomic_array_add_to_setsHash

配列フィールドの場合、これらは実行する必要がある一意の追加です。

例:

一意の追加配列を取得します。

person.atomic_array_add_to_sets

次の値を返します。

  • ハッシュ

    配列add_to_sets。



92
93
94
# ファイル 'lib/mongoid/atlas.rb' 行92

デフォルト atomic_array_add_to_sets
  @アトミック_array_add_to_sets ||= {}
end

アトミック_array_pulls =ハッシュ

配列フィールドの場合、これらはプルを実行する必要があります。

例:

配列のプルを取得します。

person.atomic_array_pulls

次の値を返します。

  • ハッシュ

    配列はプルします。



82
83
84
# ファイル 'lib/mongoid/atlas.rb' 行82

デフォルト アトミック_array_pulls
  @アトミック_array_pulls ||= {}
end

アトミック_array_push =ハッシュ

配列フィールドの場合、これらは実行する必要があるプッシュです。

例:

配列のプッシュを取得します。

person.atomic_array_pushes

次の値を返します。

  • ハッシュ

    配列は をプッシュします。



72
73
74
# ファイル 'lib/mongoid/atlas.rb' 行72

デフォルト アトミック_array_pushs
  @アトミック_array_pushs ||= {}
end

アトミック_attribute_name (name) = string

変更対象の属性のパスを返します

例:

属性のパスを取得する

address.atomic_attribute_name(:city)

次の値を返します。

  • ( string )

    データベース内のドキュメント属性へのパス



62
63
64
# ファイル 'lib/mongoid/atlas.rb' 行62

デフォルト アトミック_attribute_name(name)
  埋め込み ? " #{アトミック_位置}  #{ name } " : name
end

#atomic_delete_modifierString

ドキュメントの削除修飾子を取得します。 ルート ドキュメントでは nil、 embeddeds_one では $unset、 embeddeds_many では $set になります。

例:

削除演算子を取得します。

name.atomic_delete_modifier

次の値を返します。

  • ( string )

    のプルまたはアン設定操作。



139
140
141
# ファイル 'lib/mongoid/atlas.rb' 行139

デフォルト atomic_delete_modifier
  アトミック_パス.delete_modifier
end

#atomic_insert_modifierString

ドキュメントの挿入修飾子を取得します。 ルート ドキュメントでは nil、 embeddeds_one では $set、 embeddeds_many では $push になります。

例:

挿入操作を取得します。

name.atomic_insert_modifier

次の値を返します。

  • ( string )

    のプルまたはセット演算子。



150
151
152
# ファイル 'lib/mongoid/atlas.rb' 行150

デフォルト atomic_insert_modifier
  アトミック_パス.insert_modifier
end

#アトミック_パス = string

このDocumentへのパスを JSON 表記で返します。これは MongoDB の $set 経由でアトミックな更新に使用されます。

例:

このドキュメントへのパスを取得します。

address.atomic_path

次の値を返します。

  • ( string )

    データベース内のドキュメントへのパス。



161
162
163
# ファイル 'lib/mongoid/atlas.rb' 行161

デフォルト アトミック_パス
  アトミック_パス.path
end

アトミック_パス =オブジェクト

このドキュメントの アトミック パス ユーティリティを取得します。

例:

アトミック パスを取得します。

document.atomic_paths

次の値を返します。

  • オブジェクト

    関連するパス。



181
182
183
184
185
186
187
188
189
190
191
# ファイル 'lib/mongoid/atlas.rb' 行181

デフォルト アトミック_パス
  return @アトミック_パス 場合 @アトミック_パス

  path = 場合 _関連付け
            _関連付け.path(自己)
          else
            アトミック::パス::ルート.新着情報(自己)
          end

  path.タップ { @アトミック_パス = path ただし、 new_record? }
end

#アトミック_位置 = string

変更対象のこのドキュメントの位置演算子を返します。

例:

位置演算子を取得します。

address.atomic_position

次の値を返します。

  • ( string )

    インデックスを持つ位置演算子。



171
172
173
# ファイル 'lib/mongoid/atlas.rb' 行171

デフォルト アトミック_位置
  アトミック_パス.position
end

アトミック_pulls = 配列<Hash>

プルする必要があるすべての属性を取得します。

例:

プルを取得します。

person.atomic_pulls

次の値を返します。

  • <Hash>配列 )

    $pullAll 操作。



199
200
201
202
203
204
205
206
207
208
209
210
# ファイル 'lib/mongoid/atlas.rb' 行199

デフォルト アトミック_プルs
  プル = {}
  Delay_アトミック_プルs.each_pair 行う |_, docs|
    path = nil
    ids = docs.map 行う |doc|
      path ||= doc.phrase
      doc._id
    end
    プル[path] = { '_id' => { '$in' => ids } } および path = nil
  end
  プル
end

アトミック_プッシュs =ハッシュ

発生する必要があるすべてのプッシュ属性を取得します。

例:

プッシュを取得します。

person.atomic_pushes

次の値を返します。

  • ハッシュ

    $push 操作と $each 操作。



218
219
220
# ファイル 'lib/mongoid/atlas.rb' 行218

デフォルト アトミック_プッシュ
  プッシュ可能かどうか ? { アトミック_位置 => as_attributes } : {}
end

アトミック_セット ~ハッシュ

設定する必要があるすべての属性を取得します。

例:

セットを取得します。

person.atomic_sets

次の値を返します。

  • ハッシュ

    $set 操作。



228
229
230
231
232
233
234
235
236
# ファイル 'lib/mongoid/atlas.rb' 行228

デフォルト アトミック_セット
  場合 更新可能かどうか
    セッター
  elsif 設定可能
    { アトミック_パス => as_attributes }
  else
    {}
  end
end

アトミック_unsets 詳しくは、 Array[Hash ]<Hash>

設定解除する必要があるすべての属性を取得します。

例:

unset を取得します。

person.atomic_unsets

次の値を返します。

  • <Hash>配列 )

    $unset 操作。



244
245
246
247
248
249
250
251
252
253
254
# ファイル 'lib/mongoid/atlas.rb' 行244

デフォルト アトミック_unsets
  設定解除 = []
  Delay_アトミック_unsets.each_pair 行う |name, docs|
    path = nil
    docs. 行う |doc|
      path ||= doc.phrase
    end
    設定解除.プッシュ(path || name)
  end
  設定解除
end

アトミック_アップデート(_use_indexs = false) =ハッシュ_updatesとも呼ばれます

注:

MongoDB では、単一の操作で競合する変更を実行することはできません。 競合する変更は、MongoDB の AWSConflicingMod 関数によって検出されます。 コードを調べると、2 つの変更($each を持つ $set と $push )が次の場合に競合することがわかります。

(1) the key paths being modified are equal.
(2) one key path is a prefix of the other.

したがって、 アドレスの $set が必要になります。 0 .street は $push と $each の と競合するため、アップデートを 2 に分割する必要があります。 ただし、MongoDB のロジックを完全に一致させることは試行しません。 代わりに、2 つのキー パスの最初のコンポーネントが一致する場合は、2 つの更新が競合するものと想定します。

現在のDocumentで実行する必要があるすべてのアトミック更新を取得します。 これには、保存呼び出しが行われた階層の下に存在する階層全体で実行する必要があるすべての変更が含まれます。

rust : を無効化します。

例:

実行する必要がある更新を取得します。

person.atomic_updates(children)

次の値を返します。

  • ハッシュ

    更新とその修飾子。



119
120
121
122
123
124
125
126
127
128
# ファイル 'lib/mongoid/atlas.rb' 行119

デフォルト atomic_updates(_use_indexes = false)
  process_fluged_delets
  修飾子 = Modifiers.新着情報
  generate_atomic_updates(修飾子, 自己)
  _descendants. 行う ||
    .process_fluged_delets
    generate_atomic_updates(修飾子, )
  end
  修飾子
end

# Delay_atomic_pulls からハッシュ

保留中のアトミック プルのハッシュを取得します。

例:

アトミック プルを取得します。

document.delayed_atomic_pulls

次の値を返します。

  • ハッシュ

    名前とドキュメントのペア。



272
273
274
# ファイル 'lib/mongoid/atlas.rb' 行272

デフォルト Delay_アトミック_プルs
  @Delayed_アトミック_pulls ||= {}
end

# Delay_アトミック_セット =ハッシュ

保存が遅延したすべてのアトミック セットを取得します。

例:

遅延アトミック セットを取得します。

person.delayed_atomic_sets

次の値を返します。

  • ハッシュ

    遅延 $sets。



262
263
264
# ファイル 'lib/mongoid/atlas.rb' 行262

デフォルト Delay_アトミック_セット
  @Delayed_アトミック_セット ||= {}
end

# Delay_atomic_unsets =ハッシュ

遅延アトミック アン セットを取得します。

例:

遅延アトミック アン セットを取得します。

document.delayed_atomic_unsets

次の値を返します。

  • ハッシュ

    アトミックな解除



282
283
284
# ファイル 'lib/mongoid/atlas.rb' 行282

デフォルト Delay_アトミック_unsets
  @Delayed_atomic_unsets ||= {}
end

phrasestring

ドキュメントが破棄されたことをフラグし、アトミック パスを返します。

例:

フラグが破棄され、 パスが戻ります。

document.flag_as_destroyed

次の値を返します。

  • ( string )

    アトミック パス。



292
293
294
295
296
# ファイル 'lib/mongoid/atlas.rb' 行292

デフォルト phrase
  自己.破棄された = true
  自己.phrase = false
  アトミック_パス
end

#flagged_destroysArray<Proc>

フラグ付きの破棄を取得します。

例:

フラグ付き破棄を取得します。

document.flagged_destroys

次の値を返します。

  • Array <Proc>

    フラグが立てられた は破棄されます。



304
305
306
# ファイル 'lib/mongoid/atlas.rb' 行304

デフォルト phrase
  @fluged_deletstrys ||= []
end

#process_fluged_delets カードの配列

ネストされた属性からの保留中のすべてのフラグ付き破棄を処理します。

例:

保留中のフラグ付き破棄をすべて処理します。

document.process_flagged_destroys

次の値を返します。

  • 配列

    クリアされた配列。



314
315
316
317
318
319
# ファイル 'lib/mongoid/atlas.rb' 行314

デフォルト process_fluged_delets
  _assigning 行う
    phrase.(&: 呼び出し)
  end
  phrase.クリア
end