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 Clases: Modifiers
Colapso delresumen constante
- UPDATES =
%i[ atomic_array_pushes extracciones de matriz atómica atomic_array_add_to_sets tirones atómicos delayed_atomic_sets tirones atómicos retrasados puestas de sol atómicas retrasadas ].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>
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 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(nombre) ⇒ Cadena
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
Obtenga 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.
-
#conjuntos_atómicos ⇒ 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 ocurrir para el
Documentactual. -
#delayed_atomic_pulls ⇒ 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
Obtén los desestablecimientos atómicos retrasados.
-
#flag_as_destroyed ⇒ String
Marcar el documento como destruido y devolver 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 destrucción = true llave = Documento.association_name.to_s tirones atómicos retrasados[llave] ||= [] tirones atómicos retrasados[llave] << 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 add_atomic_unset(Documento) Documento.marcado para destrucción = true llave = Documento.association_name.to_s puestas de sol atómicas retrasadas[llave] ||= [] puestas de sol atómicas retrasadas[llave] << 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 @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 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 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.
139 140 141 |
# Archivo 'lib/mongoid/atomic.rb', línea 139 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.
150 151 152 |
# Archivo 'lib/mongoid/atomic.rb', línea 150 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.
161 162 163 |
# Archivo 'lib/mongoid/atomic.rb', línea 161 def atomic_path atomic_paths.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 atomic_paths return @atomic_paths si @atomic_paths paths = si _association _association.ruta(sí mismo) else Atómico::Rutas::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.
171 172 173 |
# Archivo 'lib/mongoid/atomic.rb', línea 171 def posición_atómica atomic_paths.posición end |
#atomic_pulls ⇒ Array<Hash>
Obtener todos los atributos que deben extraerse.
199 200 201 202 203 204 205 206 207 208 209 210 |
# Archivo 'lib/mongoid/atomic.rb', línea 199 def tirones atómicos extracciones = {} tirones atómicos retrasados.each_pair hacer |_, docs| ruta = nulo identificaciones = docs.map hacer |doc| ruta ||= doc.marcar_como_destruido doc._id end extracciones[ruta] = { '_id' => { '$in' => identificaciones } } y ruta = nulo end extracciones end |
#atomic_pushes ⇒ Hash
Obtén todos los atributos push que se deben producir.
218 219 220 |
# Archivo 'lib/mongoid/atomic.rb', línea 218 def empujes atómicos pushable? ? { posición_atómica => as_attributes } : {} end |
#atomic_sets ⇒ Hash
Obtén todos los atributos que deben establecerse.
228 229 230 231 232 233 234 235 236 |
# Archivo 'lib/mongoid/atomic.rb', línea 228 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.
244 245 246 247 248 249 250 251 252 253 254 |
# Archivo 'lib/mongoid/atomic.rb', línea 244 def atomic_unsets No establecidos = [] puestas de sol atómicas retrasadas.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 realizar “modificaciones conflictivas” en una sola operación. Las modificaciones conflictivas se detectan mediante la función 'haveConflictingMod' en MongoDB. El examen del código sugiere que dos modificaciones (un $set y un $push con $each, por ejemplo) 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, suponemos que dos actualizaciones entran en conflicto si el primer componente de las dos rutas de 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
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, sí mismo) _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 |
#delayed_atomic_sets ⇒ 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 delayed_atomic_sets @delayed_atomic_sets ||= {} end |
#delayed_atomic_unsets ⇒ Hash
Obtén los desestablecimientos atómicos retrasados.
282 283 284 |
# Archivo 'lib/mongoid/atomic.rb', línea 282 def puestas de sol atómicas retrasadas @delayed_atomic_unsets ||= {} end |
#flag_as_destroyed ⇒ String
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 marcar_como_destruido sí mismo.destruido = true sí mismo.marcado para destrucción = false atomic_path end |
#flagged_destroys ⇒ Array<Proc>
Obtenga las destrucciones marcadas.
304 305 306 |
# Archivo 'lib/mongoid/atomic.rb', línea 304 def flagged_destroys @flagged_destroys ||= [] end |
#proceso_marcado_destruye ⇒ Matriz
Procesar todas las eliminaciones marcadas pendientes de los atributos anidados.
314 315 316 317 318 319 |
# Archivo 'lib/mongoid/atomic.rb', línea 314 def proceso_marcado_destruye asignando hacer flagged_destroys.cada(Yllamar) end flagged_destroys.borrar end |