Módulo: Mongoid::Atomic
- Ampliado por:
- ActiveSupport::Concern
- Incluido en:
- Composable, 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 admitir operaciones atómicas contra la base de datos.
Definido bajo Namespace
Modules: Rutas clase: Modifiers
Resumen de constantes colapsar
- UPDATES =
%i[ atomic_array_pushes atomic_array_pulls atomic_array_add_to_sets Extracciones atómicas delayed_atomic_sets delayed_atomic_pulls delayed_atomic_unsets ].freeze
Resumen del método de instancia colapsar
-
#add_atomic_pull(documento) ⇒ objeto
Agregar el documento como una extracción atómica.
-
#add_atomic_unset(documento) ⇒ arreglo<Document>
Añadir un desajuste atómico para el documento.
-
#atomic_array_add_to_sets ⇒ Hash
Para los campos de arreglos, estas son las adiciones únicas que deben ocurrir.
-
#atomic_array_pulls ⇒ Hash
Para los campos de arreglo, estos son los retiros que deben realizarse.
-
#atomic_array_pushes ⇒ Hash
Para campos de arreglo, estos son los pushes que deben ocurrir.
-
#atomic_attribute_name(name) ⇒ String
Devuelve la ruta del atributo para su modificación.
-
#atomic_delete_modifier ⇒ String
Obtén 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, que se utiliza para actualizaciones atómicas mediante $set en MongoDB. -
#atomic_paths ⇒ Objeto
Obtén la utilidad de rutas atómicas para este documento.
-
#atomic_position ⇒ String
Devuelve el operador posicional de este documento para su modificación.
-
#atomic_pulls ⇒ Array<Hash>
Obtener todos los atributos que deben extraerse.
-
#atomic_pushes ⇒ Hash
Obtén todos los atributos push que se deben producir.
-
#atomic_sets ⇒ Hash
Obtén todos los atributos que deben establecerse.
-
#atomic_unsets ⇒ arreglo<Hash>
Obtenga todos los atributos que necesitan ser desactivados.
-
#atomic_updates(_use_indexes = false) ⇒ Hash (también: #_updates)
Obtenga todas las actualizaciones atómicas que deben realizarse para el/la
Documentactual. -
#delayed_atomic_pulls ⇒ Hash
Obten un hash de extracciones atómicas que están pendientes.
-
#delayed_atomic_sets ⇒ Hash
Obtén todos los conjuntos atómicos cuyos guardados se hayan retrasado.
-
#retardos atómicos en liquidaciones ⇒ Hash
Obtén los desestablecimientos atómicos retrasados.
-
#flag_as_destroyed ⇒ String
Marca el documento como destruido y devuelve la ruta atómica.
-
#flagged_destroys ⇒ Array<Proc>
Obtenga las destrucciones marcadas.
-
#process_flagged_destroys ⇒ arreglo
Procesar todas las eliminaciones 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 add_atomic_pull(Documento) Documento.marcado_para_destruir = true llave = Documento.association_name.to_s delayed_atomic_pulls[llave] ||= [] delayed_atomic_pulls[llave] << Documento end |
#add_atomic_unset(document) ⇒ Array<Document>
Añadir un desajuste atómico para el documento.
49 50 51 52 53 54 |
# Archivo 'lib/mongoid/atomic.rb', línea 49 def add_atomic_unset(Documento) Documento.marcado_para_destruir = true llave = Documento.association_name.to_s delayed_atomic_unsets[llave] ||= [] delayed_atomic_unsets[llave] << Documento end |
#atomic_array_add_to_sets ⇒ Hash
Para los campos de arreglos, 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 @atomic_array_add_to_sets ||= {} end |
#atomic_array_pulls ⇒ Hash
Para los campos de arreglo, estos son los retiros que deben realizarse.
82 83 84 |
# Archivo 'lib/mongoid/atomic.rb', línea 82 def atomic_array_pulls @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 atomic_array_pushes @atomic_array_pushes ||= {} end |
#atomic_attribute_name(nombre) ⇒ String
Devuelve la ruta del atributo para su modificación
62 63 64 |
# Archivo 'lib/mongoid/atomic.rb', línea 62 def atomic_attribute_name(Nombre) ? "#{atomic_position}.#{name}" : Nombre end |
#atomic_delete_modifier ⇒ String
Obtenga el modificador de eliminación para el documento. Será nulo en los documentos raíz, $unset en embeds_one, $set en embeds_many.
136 137 138 |
# Archivo 'lib/mongoid/atomic.rb', línea 136 def atomic_delete_modifier atomic_paths.delete_modifier 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.
147 148 149 |
# Archivo 'lib/mongoid/atomic.rb', línea 147 def atomic_insert_modifier atomic_paths.insert_modifier end |
#atomic_path ⇒ String
Devuelve la ruta a este Document en notación JSON, que se utiliza para actualizaciones atómicas mediante $set en MongoDB.
158 159 160 |
# Archivo 'lib/mongoid/atomic.rb', línea 158 def atomic_path atomic_paths.ruta end |
#atomic_paths ⇒ Objeto
Obtén la utilidad de rutas atómicas para este documento.
178 179 180 181 182 183 184 185 186 187 188 |
# Archivo 'lib/mongoid/atomic.rb', línea 178 def atomic_paths return @atomic_paths si @atomic_paths paths = si _association _association.ruta(sí mismo) else Atómico::Rutas::Root (raíz).Nuevo(sí mismo) end paths.tocar { @atomic_paths = paths a menos que nuevo_registro? } end |
#atomic_position ⇒ String
Devuelve el operador posicional de este documento para su modificación.
168 169 170 |
# Archivo 'lib/mongoid/atomic.rb', línea 168 def posición_atómica atomic_paths.posición end |
#atomic_pulls ⇒ Array<Hash>
Obtener todos los atributos que deben extraerse.
196 197 198 199 200 201 202 203 204 205 206 207 |
# Archivo 'lib/mongoid/atomic.rb', línea 196 def Extracciones atómicas extracciones = {} delayed_atomic_pulls.each_pair hacer |_, docs| ruta = nulo identificadores = docs.map hacer |doc| ruta ||= doc.marcar_como_destruido doc._id end extracciones[ruta] = { '_id' => { '$in' => identificadores } } y ruta = nulo end extracciones end |
#atomic_pushes ⇒ Hash
Obtén todos los atributos push que se deben producir.
215 216 217 |
# Archivo 'lib/mongoid/atomic.rb', línea 215 def impulsos_atómicos pushable? ? { posición_atómica => as_attributes } : {} end |
#atomic_sets ⇒ Hash
Obtén todos los atributos que deben establecerse.
225 226 227 228 229 230 231 232 233 |
# Archivo 'lib/mongoid/atomic.rb', línea 225 def conjuntos atómicos si ¿actualizable? asignadores elsif ¿configurable? { atomic_path => as_attributes } else {} end end |
#atomic_unsets ⇒ arreglo<Hash>
Obtenga todos los atributos que necesitan ser desactivados.
241 242 243 244 245 246 247 248 249 250 251 |
# Archivo 'lib/mongoid/atomic.rb', línea 241 def atomic_unsets No establecidos = [] delayed_atomic_unsets.each_pair hacer |Nombre, docs| ruta = nulo docs.cada hacer |doc| ruta ||= doc.marcar_como_destruido end No establecidos.push(ruta || Nombre) end No establecidos end |
#atomic_updates(_use_indexes = false) ⇒ Hash También conocido como: _updates
MongoDB no permite que se realicen «modificaciones conflictivas» en una única operación. Las modificaciones en conflicto se detectan mediante la función 'haveConflictingMod' en MongoDB. El análisis del código sugiere que dos modificaciones (como un $set y un $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 necesitaremos dividir nuestra actualización en dos partes. Sin embargo, no intentamos igualar 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:disable Style/OptionalBooleanParameter
116 117 118 119 120 121 122 123 124 125 |
# Archivo 'lib/mongoid/atomic.rb', línea 116 def atomic_updates(_use_indexes = false) process_flagged_destroys mods = Modifiers.Nuevo generate_atomic_updates(mods, sí mismo) _descendants.cada hacer |niño| niño.process_flagged_destroys generate_atomic_updates(mods, niño) end mods end |
#delayed_atomic_pulls ⇒ Hash
Obten un hash de extracciones atómicas que están pendientes.
269 270 271 |
# Archivo 'lib/mongoid/atomic.rb', línea 269 def delayed_atomic_pulls @pulls_atómicos_retrasados ||= {} end |
#delayed_atomic_sets ⇒ Hash
Obtén todos los conjuntos atómicos cuyos guardados se hayan retrasado.
259 260 261 |
# Archivo 'lib/mongoid/atomic.rb', línea 259 def delayed_atomic_sets @delayed_atomic_sets ||= {} end |
#delayed_atomic_unsets ⇒ Hash
Obtén los desestablecimientos atómicos retrasados.
279 280 281 |
# Archivo 'lib/mongoid/atomic.rb', línea 279 def delayed_atomic_unsets @delayed_atomic_unsets ||= {} end |
#flag_as_destroyed ⇒ String
Marca el documento como destruido y devuelve la ruta atómica.
289 290 291 292 293 |
# Archivo 'lib/mongoid/atomic.rb', línea 289 def marcar_como_destruido sí mismo.destruido = true sí mismo.marcado_para_destruir = false atomic_path end |
#flagged_destroys ⇒ Array<Proc>
Obtenga las destrucciones marcadas.
301 302 303 |
# Archivo 'lib/mongoid/atomic.rb', línea 301 def flagged_destroys @flagged_destroys ||= [] end |
#process_flagged_destroys ⇒ arreglo
Procesar todas las eliminaciones marcadas pendientes de los atributos anidados.
311 312 313 314 315 316 |
# Archivo 'lib/mongoid/atomic.rb', línea 311 def process_flagged_destroys asignando hacer flagged_destroys.cada(&llamar) end flagged_destroys.borrar end |