Módulo: Mongoid::Atomic
- Estendido por:
- ActiveSupport::Concern
- Incluído em:
- Composto, Contexto::Mongo
- Definido em:
- 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
Visão geral
Este módulo contém a lógica para suportar operações atômicas no banco de banco de dados.
Definido sob namespace
Módulos: Caminhos Classes: Modifiers
Colapsode resumo constante
- UPDATES =
%i[ atomic_array_pushes atomic_array_pulls atomic_array_add_to_sets atomic_pulls delay_atomic_sets delay_atomic_pulls delay_atomic_unsets ].congelar
Recolhimento do Resumo do método de instância
-
#add_atomic_pull(documento) ➤ Objeto
Adicione o documento como um pull atômico.
-
#add_atomic_unset(documento) ➤ Array<Document>
Adicione uma desconfiguração atômica para o documento.
-
#atomic_array_add_to_sets ⇒ Hash
Para campos de array, essas são as adições exclusivas que precisam acontecer.
-
#atomic_array_pulls ➤ Hash
Para campos de array, essas são as puxações que precisam acontecer.
-
#atomic_array_pushes ➤ Hash
Para campos de array, esses são os pushes que precisam acontecer.
-
#atomic_attribute_name(name) ➤ string
Retorna o caminho do atributo para modificação.
-
#atomic_delete_modifier ⇒ String
Obtenha o modificador de remoção do documento.
-
#atomic_insert_modifier ⇒ String
Obtenha o modificador de inserção para o documento.
-
#atomic_path ➤ string
Retorne o caminho para este
Document
na notação JSON, utilizado para atualizações atômicas via $set no MongoDB. -
#atomic_paths ➤ Objeto
Obtenha o utilitário de caminhos atômicos para este documento.
-
#atomic_position ➤ string
Retorna o operador posicional deste documento para modificação.
-
#atomic_pulls ➤ Array<Hash>
Obtenha todos os atributos que precisam ser extraídos.
-
#atomic_pushes ➤ Hash
Obtenha todos os atributos de push que precisam ocorrer.
-
#atomic_sets ➤ Hash
Obtenha todos os atributos que precisam ser definidos.
-
#atomic_unsets ➤ Array<Hash>
Obtenha todos os atributos que precisam ser desconfigurados.
-
#atomic_updates(_use_indexes = false) ➤ Hash (também: #_updates)
Obtenha todas as atualizações atômicas que precisam acontecer para o
Document
atual. -
#atrasou_atomic_pulls ➤ Hash
Obtenha um hash de pulls atômicos pendentes.
-
#atrasou_atomic_sets ➤ Hash
Obtenha todos os conjuntos atômicos que tiveram seus salvamentos atrasados.
-
#delay_atomic_unsets ➤ Hash
Obtenha as desconfigurações atômicas atrasadas.
-
#flag_as_destroyed ➤ string
Sinalize o documento como destruído e retorne o caminho atômico.
-
#sinalizado_destroys ➤ Array<Proc>
Obtenha as destruições sinalizadas.
-
#process_flranged_destroys toy Array
Processe todas as destruições sinalizadas pendentes de atributos aninhados.
Detalhes do método de instância
#add_atomic_pull(document) ➤ Objeto
Adicione o documento como um pull atômico.
34 35 36 37 38 39 |
# Arquivo 'lib/mongoid/atomic.rb', linha 34 def add_atomic_pull(documento) documento.sinalizado_for_destroy = true chave = documento.association_name.to_s delay_atomic_pulls[chave] ||= [] delay_atomic_pulls[chave] << documento end |
#add_atomic_unset(document) ➤ Array<Document>
Adicione uma desconfiguração atômica para o documento.
49 50 51 52 53 54 |
# Arquivo 'lib/mongoid/atomic.rb', linha 49 def add_atomic_unset(documento) documento.sinalizado_for_destroy = true chave = documento.association_name.to_s delay_atomic_unsets[chave] ||= [] delay_atomic_unsets[chave] << documento end |
#atomic_array_add_to_sets ⇒ Hash
Para campos de array, essas são as adições exclusivas que precisam acontecer.
92 93 94 |
# Arquivo 'lib/mongoid/atomic.rb', linha 92 def atomic_array_add_to_sets @atomic_array_add_to_sets ||= {} end |
#atomic_array_pulls ➤ Hash
Para campos de array, essas são as puxações que precisam acontecer.
82 83 84 |
# Arquivo 'lib/mongoid/atomic.rb', linha 82 def atomic_array_pulls @atomic_array_pulls ||= {} end |
#atomic_array_pushes ➤ Hash
Para campos de array, esses são os pushes que precisam acontecer.
72 73 74 |
# Arquivo 'lib/mongoid/atomic.rb', linha 72 def atomic_array_pushes @atomic_array_pushes ||= {} end |
#atomic_attribute_name(name) ➤ string
Retorna o caminho do atributo para modificação
62 63 64 |
# Arquivo 'lib/mongoid/atomic.rb', linha 62 def atomic_attribute_name(name) ? "#{atomic_position}.#{name}" : name end |
#atomic_delete_modifier ⇒ String
Obtenha o modificador de remoção do documento. será nulo em documentos raiz, $unset em embeds_one, $set em embeds_many.
139 140 141 |
# Arquivo 'lib/mongoid/atomic.rb', linha 139 def atomic_delete_modifier atomic_paths.delete_modifier end |
#atomic_insert_modifier ⇒ String
Obtenha o modificador de inserção para o documento. será nulo em documentos raiz, $set em embeds_one, $push em embeds_many.
150 151 152 |
# Arquivo 'lib/mongoid/atomic.rb', linha 150 def atomic_insert_modifier atomic_paths.insert_modifier end |
#atomic_path ➤ string
Retorne o caminho para este Document
na notação JSON, utilizado para atualizações atômicas via $set no MongoDB.
161 162 163 |
# Arquivo 'lib/mongoid/atomic.rb', linha 161 def atomic_path atomic_paths.caminho end |
#atomic_paths ➤ Objeto
Obtenha o utilitário de caminhos atômicos para este documento.
181 182 183 184 185 186 187 188 189 190 191 |
# Arquivo 'lib/mongoid/atomic.rb', linha 181 def atomic_paths Método @atomic_paths se @atomic_paths caminhos = se _association _association.caminho(auto) mais Atômico::Caminhos::Raiz.Novo(auto) end caminhos.toque { @atomic_paths = caminhos a menos que new_record? } end |
#atomic_position ➤ string
Retorna o operador posicional deste documento para modificação.
171 172 173 |
# Arquivo 'lib/mongoid/atomic.rb', linha 171 def atomic_position atomic_paths.Posição end |
#atomic_pulls ➤ Array<Hash>
Obtenha todos os atributos que precisam ser extraídos.
199 200 201 202 203 204 205 206 207 208 209 210 |
# Arquivo 'lib/mongoid/atomic.rb', linha 199 def atomic_pulls puxa = {} delay_atomic_pulls.cada_pair fazer |_, Docs| caminho = nada ids = Docs.map fazer |doc| caminho ||= doc.flag_as_destroyed doc._id end puxa[caminho] = { '_id' => { '$in' => ids } } e a caminho = nada end puxa end |
#atomic_pushes ➤ Hash
Obtenha todos os atributos de push que precisam ocorrer.
218 219 220 |
# Arquivo 'lib/mongoid/atomic.rb', linha 218 def atomic_pushes pushable? ? { atomic_position => as_attributes } : {} end |
#atomic_sets ➤ Hash
Obtenha todos os atributos que precisam ser definidos.
228 229 230 231 232 233 234 235 236 |
# Arquivo 'lib/mongoid/atomic.rb', linha 228 def atomic_sets se atualizável? setters elsif configurável? { atomic_path => as_attributes } mais {} end end |
#atomic_unsets ➤ Array<Hash>
Obtenha todos os atributos que precisam ser desconfigurados.
244 245 246 247 248 249 250 251 252 253 254 |
# Arquivo 'lib/mongoid/atomic.rb', linha 244 def atomic_unsets Desconfigura = [] delay_atomic_unsets.cada_pair fazer |name, Docs| caminho = nada Docs.cada fazer |doc| caminho ||= doc.flag_as_destroyed end Desconfigura.push(caminho || name) end Desconfigura end |
#atomic_updates(_use_indexes = false) ➤ Hash Também conhecido como: _updates
O MongoDB não permite que “modificações conflitantes” sejam realizadas em uma única operação. Modificações conflitantes são detectadas pela função 'keyConflictingMod' no MongoDB. O exame do código sugere que duas modificações (a $set e a $push com $each, por exemplo) entram em conflito se:
(1) the key paths being modified are equal.
(2) one key path is a prefix of the other.
Então, um $set de 'endereços'.0.street' entrará em conflito com um $push e $each para 'addresses', e precisaremos divisão nossa atualização em duas partes. No entanto, não tentamos corresponder exatamente à lógica do MongoDB. Em vez disso, assumimos que duas atualizações entrarão em conflito se o primeiro componente dos dois caminhos principais corresponder.
Obtenha todas as atualizações atômicas que precisam acontecer para o Document
atual. Isso inclui todas as alterações que precisam ocorrer em toda a hierarquia existente abaixo de onde a chamada salva foi feita.
rubocop:disable estilo/OptionalBooleanParameter
119 120 121 122 123 124 125 126 127 128 |
# Arquivo 'lib/mongoid/atomic.rb', linha 119 def atomic_updates(_use_indexes = false) process_flagens_destroys mods = Modifiers.Novo generate_atomic_updates(mods, auto) _descendentes.cada fazer |criança| criança.process_flagens_destroys generate_atomic_updates(mods, criança) end mods end |
#atrasou_atomic_pulls ➤ Hash
Obtenha um hash de pulls atômicos pendentes.
272 273 274 |
# Arquivo 'lib/mongoid/atomic.rb', linha 272 def delay_atomic_pulls @delayed_atomic_pulls ||= {} end |
#atrasou_atomic_sets ➤ Hash
Obtenha todos os conjuntos atômicos que tiveram seus salvamentos atrasados.
262 263 264 |
# Arquivo 'lib/mongoid/atomic.rb', linha 262 def delay_atomic_sets @delayed_atomic_sets ||= {} end |
#delay_atomic_unsets ➤ Hash
Obtenha as desconfigurações atômicas atrasadas.
282 283 284 |
# Arquivo 'lib/mongoid/atomic.rb', linha 282 def delay_atomic_unsets @delayed_atomic_unsets ||= {} end |
#flag_as_destroyed ➤ string
Sinalize o documento como destruído e retorne o caminho atômico.
292 293 294 295 296 |
# Arquivo 'lib/mongoid/atomic.rb', linha 292 def flag_as_destroyed auto.destruído = true auto.sinalizado_for_destroy = false atomic_path end |
#sinalizado_destroys ➤ Array<Proc>
Obtenha as destruições sinalizadas.
304 305 306 |
# Arquivo 'lib/mongoid/atomic.rb', linha 304 def sinalizados_destroys @flog_destroys ||= [] end |
#process_flranged_destroys toy Array
Processe todas as destruições sinalizadas pendentes de atributos aninhados.
314 315 316 317 318 319 |
# Arquivo 'lib/mongoid/atomic.rb', linha 314 def process_flagens_destroys _assigning fazer sinalizados_destroys.cada(&:call) end sinalizados_destroys.Limpar end |