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

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

Overview

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

名前空間で定義済み

Modules: パス クラス: Modifiers

定数の概要の削減

UPDATES =
[
  :アトミック_array_pushs,
  :アトミック_array_pulls,
  :atomic_array_add_to_sets,
  :aomic_pulls,
  :遅延_アトミック_セット,
  :遅延_アトミック_プルs,
  :遅延_アトミック_unsets
]

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

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

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

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

例:

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

person.add_atomic_pull(address)

パラメーター:

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

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



36
37
38
39
40
41
ファイル ' build/mongoid- 8.1 /lib/mongoid/atlas.rb ' の場合は36行

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

パラメーター:

次の値を返します。



51
52
53
54
55
56
ファイル ' build/mongoid- 8.1 /lib/mongoid/atlas.rb ' の場合は51行

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



94
95
96
ファイル ' build/mongoid- 8.1 /lib/mongoid/atlas.rb ' の場合は94行

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

アトミック_array_pulls =ハッシュ

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

例:

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

person.atomic_array_pulls

次の値を返します。

  • ハッシュ

    配列はプルします。



84
85
86
ファイル ' build/mongoid- 8.1 /lib/mongoid/atlas.rb ' の場合は84行

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

アトミック_array_push =ハッシュ

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

例:

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

person.atomic_array_pushes

次の値を返します。

  • ハッシュ

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



74
75
76
ファイル ' build/mongoid- 8.1 /lib/mongoid/atlas.rb ' の場合は74行

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

アトミック_attribute_name (name) = string

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

例:

属性のパスを取得する

address.atomic_attribute_name(:city)

次の値を返します。

  • ( string )

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



64
65
66
ファイル ' build/mongoid- 8.1 /lib/mongoid/atlas.rb ' の場合は64行

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

#atomic_delete_modifierString

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

例:

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

name.atomic_delete_modifier

次の値を返します。

  • ( string )

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



138
139
140
ファイル ' build/mongoid- 8.1 /lib/mongoid/atlas.rb ' の場合は138行

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

#atomic_insert_modifierString

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

例:

挿入操作を取得します。

name.atomic_insert_modifier

次の値を返します。

  • ( string )

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



149
150
151
ファイル ' build/mongoid- 8.1 /lib/mongoid/atlas.rb ' の場合は149行

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

#アトミック_パス = string

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

例:

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

address.atomic_path

次の値を返します。

  • ( string )

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



160
161
162
ファイル ' build/mongoid- 8.1 /lib/mongoid/atlas.rb ' の場合は160行

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

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

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

例:

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

document.atomic_paths

次の値を返します。

  • オブジェクト

    関連するパス。



180
181
182
183
184
185
186
187
188
ファイル ' build/mongoid- 8.1 /lib/mongoid/atlas.rb ' の場合は180行

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

#アトミック_位置 = string

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

例:

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

address.atomic_position

次の値を返します。

  • ( string )

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



170
171
172
ファイル ' build/mongoid- 8.1 /lib/mongoid/atlas.rb ' の場合は170行

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

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

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

例:

プルを取得します。

person.atomic_pulls

次の値を返します。

  • <Hash>配列 )

    $pullAll 操作。



196
197
198
199
200
201
202
203
204
205
206
207
ファイル ' build/mongoid- 8.1 /lib/mongoid/atlas.rb ' の場合は196行

デフォルト アトミック_プル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 操作。



215
216
217
ファイル ' build/mongoid- 8.1 /lib/mongoid/atlas.rb ' の場合は215行

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

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

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

例:

セットを取得します。

person.atomic_sets

次の値を返します。

  • ハッシュ

    $set 操作。



225
226
227
ファイル ' build/mongoid- 8.1 /lib/mongoid/atlas.rb ' の場合は225行

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

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

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

例:

unset を取得します。

person.atomic_unsets

次の値を返します。

  • <Hash>配列 )

    $unset 操作。



235
236
237
238
239
240
241
242
243
244
245
ファイル ' build/mongoid- 8.1 /lib/mongoid/atlas.rb ' の場合は235行

デフォルト アトミック_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で実行する必要があるすべてのアトミック更新を取得します。 これには、保存呼び出しが行われた階層の下に存在する階層全体で実行する必要があるすべての変更が含まれます。

例:

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

person.atomic_updates(children)

次の値を返します。

  • ハッシュ

    更新とその修飾子。



119
120
121
122
123
124
125
126
127
128
ファイル ' build/mongoid- 8.1 /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

次の値を返します。

  • ハッシュ

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



263
264
265
ファイル ' build/mongoid- 8.1 /lib/mongoid/atlas.rb ' の場合は263行

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

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

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

例:

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

person.delayed_atomic_sets

次の値を返します。

  • ハッシュ

    遅延 $sets。



253
254
255
ファイル ' build/mongoid- 8.1 /lib/mongoid/atlas.rb ' の場合は253行

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

# Delay_atomic_unsets =ハッシュ

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

例:

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

document.delayed_atomic_unsets

次の値を返します。

  • ハッシュ

    アトミックな解除



273
274
275
ファイル ' build/mongoid- 8.1 /lib/mongoid/atlas.rb ' の場合は273行

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

phrasestring

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

例:

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

document.flag_as_destroyed

次の値を返します。

  • ( string )

    アトミック パス。



283
284
285
286
287
ファイル ' build/mongoid- 8.1 /lib/mongoid/atlas.rb ' の場合は283行

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

#flagged_destroysArray<Proc>

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

例:

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

document.flagged_destroys

次の値を返します。

  • Array <Proc>

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



295
296
297
ファイル ' build/mongoid- 8.1 /lib/mongoid/atlas.rb ' の場合は295行

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

#process_fluged_delets カードの配列

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

例:

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

document.process_flagged_destroys

次の値を返します。

  • 配列

    クリアされた配列。



305
306
307
308
309
310
ファイル ' build/mongoid- 8.1 /lib/mongoid/atlas.rb ' の場合は305行

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