Módulo: Mongoid::Atomic
- Ampliado por:
- ActiveSupport::Preocupación
- Incluido en:
- Componible, Contextual::Mongo
- Definido en:
- 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
Overview
Este módulo contiene la lógica para soportar operaciones atómicas contra la base de datos.
Definido en el espacio de nombres
Modules: Caminos Clases: Modifiers
Colapso delresumen constante
- UPDATES =
%i[ empujes de matriz atómica extracciones de matriz atómica atomic_array_add_to_sets tirones atómicos conjuntos atómicos retrasados tirones atómicos retrasados puestas de sol atómicas retrasadas ].freeze
Colapso del resumen del método de instancia
-
#add_atomic_pull(documento) ⇒ objeto
Agregar el documento como una extracción atómica.
-
#add_atomic_unset(documento) ⇒ Array<Document>
Agrega un conjunto atómico para el documento.
-
#atomic_array_add_to_sets ⇒ Hash
Para los campos de matriz, estas son las adiciones únicas que deben ocurrir.
-
#atomic_array_pulls ⇒ Hash
Para los campos de matriz, estas son las extracciones que deben realizarse.
-
#atomic_array_pushes ⇒ Hash
Para campos de arreglo, estos son los pushes que deben ocurrir.
-
#atomic_attribute_name(nombre) ⇒ Cadena
Devuelve la ruta del atributo para su modificación.
-
#atomic_delete_modifier ⇒ String
Obtenga el modificador de eliminación para el documento.
-
#atomic_insert_modifier ⇒ String
Obtenga el modificador de inserción para el documento.
-
#atomic_path ⇒ String
Devuelve la ruta a este
Documenten notación JSON, utilizada para actualizaciones atómicas a través de $set en MongoDB. -
#atomic_paths ⇒ Objeto
Obtenga la utilidad de rutas atómicas para este documento.
-
#posición_atómica ⇒ Cadena
Devuelve el operador posicional de este documento para su modificación.
-
#atomic_pulls ⇒ Matriz<Hash>
Obtenga todos los atributos que se necesitan extraer.
-
#atomic_pushes ⇒ Hash
Obtenga todos los atributos push que deben ocurrir.
-
#conjuntos_atómicos ⇒ Hash
Obtenga todos los atributos que deben configurarse.
-
#atomic_unsets ⇒ Matriz<Hash>
Obtenga todos los atributos que deben desactivarse.
-
#atomic_updates(_use_indexes = false) ⇒ Hash (también: #_updates)
Obtenga todas las actualizaciones atómicas que deben ocurrir para el
Documentactual. -
#pulls_atómicos_retardados ⇒ Hash
Obtenga un hash de los pulls atómicos que están pendientes.
-
#delayed_atomic_sets ⇒ Hash
Obtén todos los conjuntos atómicos cuyos guardados han sido retrasados.
-
#retardos atómicos en liquidaciones ⇒ Hash
Obtenga los desajustes atómicos retrasados.
-
#bandera_como_destruida ⇒ Cadena
Marcar el documento como destruido y devolver la ruta atómica.
-
#flagged_destroys ⇒ Array<Proc>
Obtenga las destrucciones marcadas.
-
#proceso_marcado_destruye ⇒ Matriz
Procesar todas las destrucciones marcadas pendientes de los atributos anidados.
Detalles del método de instancia
#add_atomic_pull(documento) ⇒ Objeto
Agregar el documento como una extracción atómica.
34 35 36 37 38 39 |
# Archivo 'lib/mongoid/atomic.rb', línea 34 def añadir_pull_atómico(Documento) Documento.marcado para destrucción = true clave = Documento.association_name.a_s tirones atómicos retrasados[clave] ||= [] tirones atómicos retrasados[clave] << Documento end |
#add_atomic_unset(document) ⇒ Array<Document>
Agrega un conjunto atómico para el documento.
49 50 51 52 53 54 |
# Archivo 'lib/mongoid/atomic.rb', línea 49 def añadir_desactivación_atómica(Documento) Documento.marcado para destrucción = true clave = Documento.association_name.a_s puestas de sol atómicas retrasadas[clave] ||= [] puestas de sol atómicas retrasadas[clave] << Documento end |
#atomic_array_add_to_sets ⇒ Hash
Para los campos de matriz, estas son las adiciones únicas que deben ocurrir.
92 93 94 |
# Archivo 'lib/mongoid/atomic.rb', línea 92 def atomic_array_add_to_sets @matriz_atómica_añadir_a_conjuntos ||= {} end |
#atomic_array_pulls ⇒ Hash
Para los campos de matriz, estas son las extracciones que deben realizarse.
82 83 84 |
# Archivo 'lib/mongoid/atomic.rb', línea 82 def extracciones de matriz atómica @atomic_array_pulls ||= {} end |
#atomic_array_pushes ⇒ Hash
Para campos de arreglo, estos son los pushes que deben ocurrir.
72 73 74 |
# Archivo 'lib/mongoid/atomic.rb', línea 72 def empujes de matriz atómica @atomic_array_pushes ||= {} end |
#atomic_attribute_name(nombre) ⇒ Cadena
Devuelve la ruta del atributo para su modificación.
62 63 64 |
# Archivo 'lib/mongoid/atomic.rb', línea 62 def nombre_del_atributo_atómico(Nombre) ? "#{posición_atómica}.#{nombre}" : Nombre end |
#atomic_delete_modifier ⇒ String
Obtener el modificador de eliminación del documento. Será nulo en los documentos raíz, $unset en embeds_one y $set en embeds_many.
139 140 141 |
# Archivo 'lib/mongoid/atomic.rb', línea 139 def atomic_delete_modifier rutas atómicas.eliminar_modificador end |
#atomic_insert_modifier ⇒ String
Obtén el modificador de inserción para el documento. Será nulo en documentos raíz, $set en embeds_one, $push en embeds_many.
150 151 152 |
# Archivo 'lib/mongoid/atomic.rb', línea 150 def atomic_insert_modifier rutas atómicas.insert_modifier end |
#ruta_atómica ⇒ Cadena
Devuelve la ruta a este Document en notación JSON, utilizada para actualizaciones atómicas a través de $set en MongoDB.
161 162 163 |
# Archivo 'lib/mongoid/atomic.rb', línea 161 def ruta atómica rutas atómicas.ruta end |
#atomic_paths ⇒ Objeto
Obtenga la utilidad de rutas atómicas para este documento.
181 182 183 184 185 186 187 188 189 190 191 |
# Archivo 'lib/mongoid/atomic.rb', línea 181 def rutas atómicas return @atómico_rutas Si @atómico_rutas paths = Si _asociación _asociación.ruta(yo) else Atómico::Caminos::Raíz.Nuevo(yo) end paths.grifo { @atómico_rutas = paths a no ser que ¿nuevo_registro? } end |
#posición_atómica ⇒ Cadena
Devuelve el operador posicional de este documento para su modificación.
171 172 173 |
# Archivo 'lib/mongoid/atomic.rb', línea 171 def posición atómica rutas atómicas.posición end |
#atomic_pulls ⇒ Matriz<Hash>
Obtenga todos los atributos que se necesitan extraer.
199 200 201 202 203 204 205 206 207 208 209 210 |
# Archivo 'lib/mongoid/atomic.rb', línea 199 def tirones atómicos tira = {} tirones atómicos retrasados.each_pair hacer |_, docs| ruta = nulo identificaciones = docs.map hacer |doc| ruta ||= doc.bandera destruida doc._id end tira[ruta] = { '_id' => { '$in' => identificaciones } } y ruta = nulo end tira end |
#atomic_pushes ⇒ Hash
Obtenga todos los atributos push que deben ocurrir.
218 219 220 |
# Archivo 'lib/mongoid/atomic.rb', línea 218 def empujes atómicos ¿Empujable? ? { posición atómica => como_atributos } : {} end |
#conjuntos_atómicos ⇒ Hash
Obtenga todos los atributos que deben configurarse.
228 229 230 231 232 233 234 235 236 |
# Archivo 'lib/mongoid/atomic.rb', línea 228 def conjuntos atómicos Si ¿actualizable? setters elsif ¿configurable? { ruta atómica => como_atributos } else {} end end |
#atomic_unsets ⇒ arreglo<Hash>
Obtenga todos los atributos que deben desactivarse.
244 245 246 247 248 249 250 251 252 253 254 |
# Archivo 'lib/mongoid/atomic.rb', línea 244 def puestas atómicas desajustes = [] puestas de sol atómicas retrasadas.each_pair hacer |Nombre, docs| ruta = nulo docs.cada hacer |doc| ruta ||= doc.bandera destruida end desajustes.Push(ruta || Nombre) end desajustes end |
#atomic_updates(_use_indexes = false) ⇒ Hash También conocido como: _updates
MongoDB no permite realizar modificaciones conflictivas en una sola operación. La función 'haveConflictingMod' detecta estas modificaciones. Un análisis del código sugiere que dos modificaciones (por ejemplo, una $set y una $push con $each) entran en conflicto si:
(1) the key paths being modified are equal.
(2) one key path is a prefix of the other.
Por lo tanto, un $set de 'addresses.0.street' entrará en conflicto con un $push y $each a 'addresses', y tendremos que dividir nuestra actualización en dos partes. Sin embargo, no intentamos replicar exactamente la lógica de MongoDB. En su lugar, asumimos que dos actualizaciones entran en conflicto si el primer componente de las dos rutas clave coincide.
Obtén todas las actualizaciones atómicas que deben suceder para la Document actual. Esto incluye todos los cambios que deben ocurrir en toda la jerarquía que existe por debajo de donde se realizó la llamada de guardado.
rubocop:deshabilitar Estilo/ParámetroBooleanoOpcional
119 120 121 122 123 124 125 126 127 128 |
# Archivo 'lib/mongoid/atomic.rb', línea 119 def atomic_updates(_use_indexes = false) proceso_marcado_destruye mods = Modifiers.Nuevo generate_atomic_updates(mods, yo) _descendants.cada hacer |niño| niño.proceso_marcado_destruye generate_atomic_updates(mods, niño) end mods end |
#pulls_atómicos_retardados ⇒ Hash
Obtenga un hash de los pulls atómicos que están pendientes.
272 273 274 |
# Archivo 'lib/mongoid/atomic.rb', línea 272 def tirones atómicos retrasados @tirones atómicos retrasados ||= {} end |
#conjuntos atómicos retrasados ⇒ Hash
Obtén todos los conjuntos atómicos cuyos guardados han sido retrasados.
262 263 264 |
# Archivo 'lib/mongoid/atomic.rb', línea 262 def conjuntos atómicos retrasados @delayed_atomic_sets ||= {} end |
#retrasos_atómicos_desactivados ⇒ Hash
Obtenga los desajustes atómicos retrasados.
282 283 284 |
# Archivo 'lib/mongoid/atomic.rb', línea 282 def puestas de sol atómicas retrasadas @puestas_atómicas_retrasadas ||= {} end |
#bandera_como_destruida ⇒ Cadena
Marcar el documento como destruido y devolver la ruta atómica.
292 293 294 295 296 |
# Archivo 'lib/mongoid/atomic.rb', línea 292 def bandera destruida yo.destruido = true yo.marcado para destrucción = false ruta atómica end |
#flagged_destroys ⇒ Array<Proc>
Obtenga las destrucciones marcadas.
304 305 306 |
# Archivo 'lib/mongoid/atomic.rb', línea 304 def marcado_destruye @flagged_destroys ||= [] end |
#proceso_marcado_destruye ⇒ Matriz
Procesar todas las destrucciones marcadas pendientes de los atributos anidados.
314 315 316 317 318 319 |
# Archivo 'lib/mongoid/atomic.rb', línea 314 def proceso_marcado_destruye _asignación hacer marcado_destruye.cada(Y:llamar) end marcado_destruye.borrar end |