모듈: Mongoid::Atomic
- 확장자:
- ActiveSupport::Concern
- 포함 항목:
- 컴포저블, Contextual::Mongo
- 다음에 정의됨:
- lib/mongoid/atomic.rb,
lib/mongoid/atomic/modifiers.rb,
lib/mongoid/atomic/paths/root.rb,
lib/mongoid/atomic/paths/embedded.rb,
lib/mongoid/atomic/paths/embedded/one.rb,
lib/mongoid/atomic/paths/embedded/many.rb
개요
이 모듈에는 데이터베이스 에 대한 원자 조작을 지원하기 위한 로직이 포함되어 있습니다.
네임스페이스 아래에 정의됨
상수 요약 접기
- UPDATES =
%i[ atomic_array_pushs atomic_array_pulls atomic_array_add_to_sets atomic_pulls delay_atomic_sets delay_atomic_pulls delay_atomic_unsets ].동결
인스턴스 메서드 요약 접기
-
#add_atomic_pull(문서) ⇒ 객체
문서 를 원자적 풀로 추가합니다.
-
#add_atomic_unset(문서) ⇒ Array<Document>
문서에 대한 원자적 unset을 추가합니다.
-
#atomic_array_add_to_sets ⇒ Hash
배열 필드의 경우 이러한 작업이 수행되어야 하는 고유한 추가 작업이 있습니다.
-
#atomic_array_pulls ⇒ 해시
배열 필드의 경우 다음과 같은 상황이 발생해야 합니다.
-
#atomic_array_pushes ⇒ 해시
배열 필드의 경우 발생해야 하는 푸시입니다.
-
#atomic_attribute_name(name) ⇒ string
수정할 속성의 경로를 반환합니다.
-
#atomic_delete_modifier ⇒ String
문서 에 대한 제거 수정자를 가져옵니다.
-
#atomic_insert_modifier ⇒ String
문서 의 삽입 수정자를 가져옵니다.
-
#atomic_path ⇒ string
이
Document
의 경로를 JSON 표기법으로 반환하며, MongoDB 에서 $ 설정하다 을(를) 통해 원자성 업데이트에 사용됩니다. -
#atomic_paths ⇒ 객체
이 문서에 대한 원자 경로 유틸리티를 가져옵니다.
-
#atomic_position ⇒ string
수정할 문서 의 위치 연산자 를 반환합니다.
-
#atomic_pulls ⇒ Array<Hash>
가져와야 하는 모든 속성을 가져옵니다.
-
#atomic_pushes ⇒ 해시
발생해야 하는 모든 푸시 속성을 가져옵니다.
-
#atomic_sets ⇒ 해시
설정해야 하는 모든 속성을 가져옵니다.
-
#atomic_unsets ⇒ Array<Hash>
설정을 해제해야 하는 모든 속성을 가져옵니다.
-
# 원자_업데이트( _use_indexes = false) ⇒ 해시 (동의어: #_updates)
현재
Document
에 대해 발생해야 하는 모든 원자성 업데이트를 가져옵니다. -
#delay_atomic_pulls ⇒ 해시
보류 중인 원자성 풀의 해시를 가져옵니다.
-
#delay_atomic_sets ⇒ 해시
저장이 지연된 모든 원자 세트를 가져옵니다.
-
#delay_atomic_unsets ⇒ 해시
지연된 원자적 언셋을 가져옵니다.
-
#flag_as_destroyed ⇒ string
문서 에 폐기됨으로 플래그를 지정하고 원자 경로를 반환합니다.
-
#플래그가 지정된_destorys ⇒ Array<Proc>
플래그가 지정된 폐기를 가져옵니다.
-
#process_flagged_destroys ⇒ 배열
중첩된 속성에서 보류 중인 플래그가 지정된 모든 삭제를 처리합니다.
인스턴스 메서드 세부 정보
#add_atomic_pull(문서) ⇒ 객체
문서 를 원자적 풀로 추가합니다.
34 35 36 37 38 39 |
# 파일 'lib/mongoid/atomic.rb', 줄 34 def add_atomic_pull(문서) 문서.flagged_for_destory = true 키 = 문서.association_name.to_s delay_atomic_pulls[키] ||= [] delay_atomic_pulls[키] << 문서 end |
#add_atomic_unset(document) ⇒ Array<Document>
문서에 대한 원자적 unset을 추가합니다.
49 50 51 52 53 54 |
# 파일 'lib/mongoid/atomic.rb', 줄 49 def add_atomic_unset(문서) 문서.flagged_for_destory = true 키 = 문서.association_name.to_s delay_atomic_unsets[키] ||= [] delay_atomic_unsets[키] << 문서 end |
#atomic_array_add_to_sets ⇒ Hash
배열 필드의 경우 이러한 작업이 수행되어야 하는 고유한 추가 작업이 있습니다.
92 93 94 |
# 파일 'lib/mongoid/atomic.rb', 줄 92 def atomic_array_add_to_sets @atomic_array_add_to_sets ||= {} end |
#atomic_array_pulls ⇒ 해시
배열 필드의 경우 다음과 같은 상황이 발생해야 합니다.
82 83 84 |
# 파일 'lib/mongoid/atomic.rb', 줄 82 def atomic_array_pulls @atomic_array_pulls ||= {} end |
#atomic_array_pushes ⇒ 해시
배열 필드의 경우 발생해야 하는 푸시입니다.
72 73 74 |
# 파일 'lib/mongoid/atomic.rb', 줄 72 def atomic_array_pushs @atomic_array_pushs ||= {} end |
#atomic_attribute_name(name) ⇒ string
수정할 속성의 경로를 반환합니다.
62 63 64 |
# 파일 'lib/mongoid/atomic.rb', 줄 62 def atomic_attribute_name(이름) ? "#{atomic_position}.#{name}" : 이름 end |
#atomic_delete_modifier ⇒ String
문서 에 대한 제거 수정자를 가져옵니다. 루트 문서에서는 nil, embeddeds_one에서는 $unset, embeddeds_many에서는 $ 설정하다 됩니다.
139 140 141 |
# 파일 'lib/mongoid/atomic.rb', 줄 139 def atomic_delete_modifier atomic_paths.delete_modifier end |
#atomic_insert_modifier ⇒ String
문서 의 삽입 수정자를 가져옵니다. 루트 문서에서는 nil, embeddeds_one에서는 $, embeddeds_many에서는 $push가 설정하다 됩니다.
150 151 152 |
# 파일 'lib/mongoid/atomic.rb', 줄 150 def atomic_insert_modifier atomic_paths.insert_modifier end |
#atomic_path ⇒ string
이 Document
의 경로를 JSON 표기법으로 반환하며, MongoDB 에서 $ 설정하다 을(를) 통해 원자성 업데이트에 사용됩니다.
161 162 163 |
# 파일 'lib/mongoid/atomic.rb', 줄 161 def atomic_path atomic_paths.경로 end |
#atomic_paths ⇒ 객체
이 문서에 대한 원자 경로 유틸리티를 가져옵니다.
181 182 183 184 185 186 187 188 189 190 191 |
# 파일 'lib/mongoid/atomic.rb', 줄 181 def atomic_paths 반환 @atomic_paths 만약 @atomic_paths 경로 = 만약 _association _association.경로(self) other 원자::경로::루트.신규(self) end 경로.탭 { @atomic_paths = 경로 하지 않는 한 new_record? } end |
#atomic_position ⇒ string
수정할 문서 의 위치 연산자 를 반환합니다.
171 172 173 |
# 파일 'lib/mongoid/atomic.rb', 줄 171 def 원자 위치 atomic_paths.직위 end |
#atomic_pulls ⇒ Array<Hash>
가져와야 하는 모든 속성을 가져옵니다.
199 200 201 202 203 204 205 206 207 208 209 210 |
# 파일 'lib/mongoid/atomic.rb', 줄 199 def atomic_pulls pulls = {} delay_atomic_pulls.각각의 쌍 do |_, 참고자료| 경로 = nil ID = 참고자료.map do |doc| 경로 ||= doc.flag_as_destroyed doc._id end pulls[경로] = { '_id' => { '$in' => ID } } 개인정보 정책에 경로 = nil end pulls end |
#atomic_pushes ⇒ 해시
발생해야 하는 모든 푸시 속성을 가져옵니다.
218 219 220 |
# 파일 'lib/mongoid/atomic.rb', 줄 218 def atomic_pushes 푸시 가능? ? { 원자 위치 => as_attributes } : {} end |
#atomic_sets ⇒ 해시
설정해야 하는 모든 속성을 가져옵니다.
228 229 230 231 232 233 234 235 236 |
# 파일 'lib/mongoid/atomic.rb', 줄 228 def atomic_sets 만약 업데이트 가능? 세터 elsif 설정 가능? { atomic_path => as_attributes } other {} end end |
#atomic_unsets ⇒ Array<Hash>
설정을 해제해야 하는 모든 속성을 가져옵니다.
244 245 246 247 248 249 250 251 252 253 254 |
# 파일 'lib/mongoid/atomic.rb', 줄 244 def atomic_unsets Unsets = [] delay_atomic_unsets.각각의 쌍 do |이름, 참고자료| 경로 = nil 참고자료.각 do |doc| 경로 ||= doc.flag_as_destroyed end Unsets.push(경로 || 이름) end Unsets end |
#atomic_updates(_use_indexes = false) ⇒ 해시 _updates 라고도 함
MongoDB 는 단일 작업으로 '상충하는 수정'을 수행하는 것을 허용하지 않습니다. 충돌하는 수정 사항은 MongoDB 의 'haveConflictingMod' 함수에 의해 감지됩니다. 코드를 살펴보면 다음과 같은 경우 두 가지 수정 사항( 예시 : $ 설정하다 과 $each 를 사용한 $push )이 충돌하는 것으로 나타났습니다.
(1) the key paths being modified are equal.
(2) one key path is a prefix of the other.
따라서 $ 설정하다 '주소.0.street'는 'addresses'에 대한 $push 및 $each와 충돌하므로 업데이트 를 두 부분으로 분할 해야 합니다. 그러나 MongoDB의 로직을 정확히 일치시키려고 시도하지는 않습니다. 대신 두 키 경로의 첫 번째 구성 요소가 일치하면 두 업데이트가 충돌한다고 가정합니다.
현재 Document
에 대해 발생해야 하는 모든 원자성 업데이트를 가져옵니다. 여기에는 저장 호출이 이루어진 위치 아래에 있는 전체 계층 구조에서 발생해야 하는 모든 변경 사항이 포함됩니다.
Rubocop:Disable 스타일/OptionalBooleanParameter
119 120 121 122 123 124 125 126 127 128 |
# 파일 'lib/mongoid/atomic.rb', 줄 119 def atomic_updates(_use_indexes = 거짓) process_flagged_destorys mods = Modifiers.신규 generate_atomic_updates(mods, self) _descendants.각 do |자식| 자식.process_flagged_destorys generate_atomic_updates(mods, 자식) end mods end |
#delay_atomic_pulls ⇒ 해시
보류 중인 원자성 풀의 해시를 가져옵니다.
272 273 274 |
# 파일 'lib/mongoid/atomic.rb', 줄 272 def delay_atomic_pulls @delayed_atomic_pulls ||= {} end |
#delay_atomic_sets ⇒ 해시
저장이 지연된 모든 원자 세트를 가져옵니다.
262 263 264 |
# 파일 'lib/mongoid/atomic.rb', 줄 262 def delay_atomic_sets @delayed_atomic_sets ||= {} end |
#delay_atomic_unsets ⇒ 해시
지연된 원자적 언셋을 가져옵니다.
282 283 284 |
# 파일 'lib/mongoid/atomic.rb', 줄 282 def delay_atomic_unsets @delayed_atomic_unsets ||= {} end |
#flag_as_destroyed ⇒ string
문서 에 폐기됨으로 플래그를 지정하고 원자 경로를 반환합니다.
292 293 294 295 296 |
# 파일 'lib/mongoid/atomic.rb', 줄 292 def flag_as_destroyed self.파괴됨 = true self.flagged_for_destory = 거짓 atomic_path end |
#플래그가 지정된_destorys ⇒ Array<Proc>
플래그가 지정된 폐기를 가져옵니다.
304 305 306 |
# 파일 'lib/mongoid/atomic.rb', 줄 304 def 플래그가 지정된_삭제 @flaged_destorys ||= [] end |
#process_flagged_destroys ⇒ 배열
중첩된 속성에서 보류 중인 플래그가 지정된 모든 삭제를 처리합니다.
314 315 316 317 318 319 |
# 파일 'lib/mongoid/atomic.rb', 줄 314 def process_flagged_destorys _assigning do 플래그가 지정된_삭제.각(&:call) end 플래그가 지정된_삭제.지우기 end |