モジュール: Mongoid::Criteria::Queryable::Storable Private
- 次のドキュメントに含まれます。
- Mongoid::Criteria::Queryable
- 定義:
- lib/mongoid/criteria/queryable/storable.rb
Overview
このモジュールはプライベート API の一部です。 このモジュールは将来削除または変更される可能性があるため、可能な限り使用しないでください。
このモジュールは、クエリ式を Criteria のセレクターに書き込むメソッドをカプセル化します。
クエリ式は、必要に応じてすでに展開されている必要があります。 このモジュールのメソッドは、式値の処理を実行しません。
このモジュールのメソッドは否定を処理しません。否定が必要な場合は、これらのメソッドの前段階ですでに処理されている必要があります。
インスタンス メソッドの概要を折りたたむ
-
# add_field_ Expression (field, value) = 保存可能
private
クエリにフィールド式を追加します。
-
次の_論理_演算子_式(演算子、 op_expr )==保存可能
private
論理演算子式を セレクター に追加します。
-
#add_one_ Expression (フィールド,値) = 保存可能
private
クエリに任意の式を追加します。
-
# add_operator_expr (operator, op_expr) = 保存可能
private
セレクターに演算子式を追加します。
インスタンス メソッドの詳細
# add_field_ Expression (field, value) = 保存可能
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
クエリにフィールド式を追加します。
field
はフィールド名で、string である必要があります。 このメソッドが呼び出されるまでに、上流のコードは他のフィールドまたはキーの型を単純なstringに変換している必要があります。
value
は任意のタイプにすることができ、変更されずにセレクターに書き込まれます。
このメソッドは、指定されたフィールド値に対して処理を実行しません。
レシーバーをミューテーションします。
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# ファイル 'lib/mongoid/criteria/queryable/storable.rb' は、 36行 デフォルト add_field_式(フィールド, 価値) ただし、 フィールド.is_a?(文字列) 発生 ArgumentError, "フィールドは string である必要があります: #{ field } " end 場合 フィールド.start_with?('$') 発生 ArgumentError, "フィールドは演算子にできません($ で始まる): #{ field } " end 場合 セレクター[フィールド] # 試みているフィールドによる制限はすでにあります 制限する場合は、制限を組み合わせます。 場合 価値.is_a?(ハッシュ) & & セレクター[フィールド].is_a?(ハッシュ) & & 価値.キー.すべて? { |キー| key_s = キー.to_s key_s.start_with?('$') & & !セレクター[フィールド].キー.map(&:to_s).include?(key_s) } 次に 複数の演算子を同じフィールドで結合できます。 既存のハッシュにそれらを追加する 。 new_value = セレクター[フィールド].merge(価値) セレクター.store(フィールド, new_value) elsif セレクター[フィールド] != 価値 add_operator_式(' $and ', [{フィールド => 価値}]) end else セレクター.store(フィールド, 価値) end 自己 end |
次の_論理_演算子_式(演算子、 op_expr ) ==保存可能
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
論理演算子式を セレクター に追加します。
このメソッドは論理演算子のみを取り扱います($and、$nor、$or)。 別の演算子で呼び出された場合は、ArgumentError が発生します。 MQL では、$not はフィールドレベルの演算子であり、クエリレベルの演算子ではないため、$not はこのメソッドによって処理されないことに注意してください。
このメソッドは、呼び出し元の便宜上、演算子と演算子値式を個別に受け取ります。 ハッシュ{operator => op_expr}の保存を取り扱うことができます。
セレクターが、指定された演算子(最上位)である単一の条件で構成されている場合、 op_expr で指定された新しい条件が、指定された演算子の既存の条件に追加されます。 たとえば、セレクターが現在次の場合。
{'$or' => [{'hello' => 'world'}]}
... および 演算子が '$or' で、 op_expr が[{'rest' => 123 '}]であれば、結果のセレクターは次のようになります。
{'$or' => [{'hello' => 'world'}, {'test' => 123}]}
このメソッドでは、常に新しい条件が追加の要件として追加されます。つまり、レシーバーがオペランドの 1 つになる ActiveRecord や の動作は実装されていません。 このメソッドの前のコードでは、このような動作が実装されることが予想されています。
このメソッドは 値を簡素化しません(つまり、セレクターが現在空で、 演算子が $and の場合、$and が原則として省略できる場合でも、op_expr は $and を使用してセレクターに書き込まれます)。 このような簡素化は、上流のコードによってすでに実行されていることが予想されます。
このメソッドはレシーバーをミューテーションします。
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
# ファイル 'lib/mongoid/criteria/queryable/storable.rb' は、 108行 デフォルト add_ logical_operator_ Expression(演算子, op_expr) ただし、 演算子.is_a?(文字列) 発生 ArgumentError, "演算子は string である必要があります: #{ Operator } " end ただし、 %w($and $nor $or).include?(演算子) 発生 ArgumentError, "このメソッドは論理演算子のみを取り扱います ($and、$nor、$or)。指定された演算子: #{演算子} " end ただし、 op_expr.is_a?(配列) 発生 Errors::InvalidQuery, " #{ オペレーター } } の 引数は配列である必要があり ます : # { { Errors :: InvalidQuery ] end 場合 セレクター.Length == 1 & & セレクター.キー.最初に == 演算子 new_value = セレクター.values.最初に + op_expr セレクター.store(演算子, new_value) elsif 演算子 == ' $and ' || セレクター.空の場合 # $and は常に最上位レベルに追加でき、結合されます 他の条件が存在する場合には、 # を使用します。 場合 current_value = セレクター[演算子] new_value = current_value + op_expr セレクター.store(演算子, new_value) else セレクター.store(演算子, op_expr) end else 他の演算子は個別に追加する必要があります 場合 セレクター[演算子] add_ logical_operator_ Expression(' $and ', [演算子 => op_expr]) else セレクター.store(演算子, op_expr) end end 自己 end |
#add_one_ Expression (フィールド,値) = 保存可能
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
クエリに任意の式を追加します。
フィールドは、フィールド名または演算子のいずれかになります。
レシーバーをミューテーションします。
223 224 225 226 227 228 229 230 231 232 233 |
# ファイル 'lib/mongoid/criteria/queryable/storable.rb' は、 223行 デフォルト add_one_式(フィールド, 価値) ただし、 フィールド.is_a?(文字列) 発生 ArgumentError, "フィールドは string である必要があります: #{ field } " end 場合 フィールド.start_with?('$') add_operator_式(フィールド, 価値) else add_field_式(フィールド, 価値) end end |
# add_operator_expr (operator, op_expr) = 保存可能
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
セレクターに演算子式を追加します。
このメソッドは、呼び出し元の便宜上、演算子と演算子値式を個別に受け取ります。 ハッシュ{operator => op_expr}の保存を取り扱うことができます。
演算子の値は任意のタイプにすることができます。
セレクターの中にすでに指定された演算子がある場合(最上位レベル)、 op_expr で指定された新しい条件が、指定された演算子の既存の条件に追加されます。 $and では簡単です。他の論理演算子の場合、このメソッドの動作は既存の演算子に新しい条件を追加することです。 たとえば、セレクターが現在次の場合。
{'foo' => 'bar', '$or' => [{'hello' => 'world'}]}
... および 演算子が '$or' であり、 op_expr が{'tools' => 123 '}であれば、結果のセレクターは次のようになります。
{'foo' => 'bar', '$or' => [{'hello' => 'world'}, {'test' => 123}]}
これは、既存のセレクターと新しい演算子式の間で OR を実装しません。これを処理するのはアップストリーム メソッドのジョブです。 このメソッドは、既存のセレクターがすでに操作の正しい左側であることを前提として、op_expr をセレクターに保存するだけです。
$where や $text のような非論理クエリレベルの演算子の場合、同じ名前の最上位の演算子がすでに存在する場合は、最上位の $and 演算子を介してセレクターに op_expr が追加され、次を含むセレクターが生成されます:両方の演算子値。
このメソッドは 値を簡素化しません(つまり、セレクターが現在空で、 演算子が $and の場合、$and が原則として省略できる場合でも、op_expr は $and を使用してセレクターに書き込まれます)。
このメソッドはレシーバーをミューテーションします。
188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 |
# ファイル 'lib/mongoid/criteria/queryable/storable.rb' は、 188行 デフォルト add_operator_式(演算子, op_expr) ただし、 演算子.is_a?(文字列) 発生 ArgumentError, "演算子は string である必要があります: #{ Operator } " end ただし、 演算子.start_with?('$') 発生 ArgumentError, " 演算子は $: #{ オペレーター } で始まる必要があります " end 場合 %w($and $nor $or).include?(演算子) return add_ logical_operator_ Expression(演算子, op_expr) end 他の演算子の場合、演算子が に既に存在する場合、 $and で新しい条件を追加し、それ以外の場合は を追加します # 新しい条件を最上位レベルに。 場合 セレクター[演算子] add_ logical_operator_ Expression(' $and ', [{演算子 => op_expr}]) else セレクター.store(演算子, op_expr) end 自己 end |