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

Detalles del método de instancia

#add_atomic_pull(documento) ⇒ objeto

Agregar el documento como una extracción atómica.

Ejemplos:

Agrega el pull atómico.

person.add_atomic_pull(address)

Parámetros:

  • Documento (documento)

    O documento incrustado para ser removido.



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.

Ejemplos:

Añade un conjunto atómico.

document.add_atomic_unset(doc)

Parámetros:

  • Documento (documento)

    El documento secundario.

Devuelve:

  • (Array<documento>)

    Los niños y niñas.



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_setsHash

Para los campos de matriz, estas son las adiciones únicas que deben ocurrir.

Ejemplos:

Obtenga los agregados únicos de la matriz.

person.atomic_array_add_to_sets

Devuelve:

  • (encriptada)

    El arreglo add_to_sets.



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_pullsHash

Para los campos de arreglo, estos son los retiros que deben realizarse.

Ejemplos:

Obtén las extracciones de arreglos.

person.atomic_array_pulls

Devuelve:

  • (encriptada)

    El arreglo tira.



82
83
84
# Archivo 'lib/mongoid/atomic.rb', línea 82

def extracciones de matriz atómica
  @atomic_array_pulls ||= {}
end

#atomic_array_pushesHash

Para campos de arreglo, estos son los pushes que deben ocurrir.

Ejemplos:

Obtén los insertos en el arreglo.

person.atomic_array_pushes

Devuelve:

  • (encriptada)

    El arreglo empuja.



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

Ejemplos:

Obtener la ruta del atributo

address.atomic_attribute_name(:city)

Devuelve:

  • (string)

    La ruta al atributo del documento en la base de datos



62
63
64
# Archivo 'lib/mongoid/atomic.rb', línea 62

def atomic_attribute_name(Nombre)
  ¿Incorporado? ? "#{atomic_position}.#{name}" : Nombre
end

#atomic_delete_modifierString

Obtenga el modificador de eliminación para el documento. Será nulo en los documentos raíz, $unset en embeds_one, $set en embeds_many.

Ejemplos:

Obtener el operador de eliminación.

name.atomic_delete_modifier

Devuelve:

  • (string)

    La operación de extracción o anulación.



139
140
141
# Archivo 'lib/mongoid/atomic.rb', línea 139

def atomic_delete_modifier
  atomic_paths.delete_modifier
end

#atomic_insert_modifierString

Obtén el modificador de inserción para el documento. Será nulo en documentos raíz, $set en embeds_one, $push en embeds_many.

Ejemplos:

Obtén la operación de inserción.

name.atomic_insert_modifier

Devuelve:

  • (string)

    El operador pull o set.



150
151
152
# Archivo 'lib/mongoid/atomic.rb', línea 150

def atomic_insert_modifier
  atomic_paths.insert_modifier
end

#atomic_pathString

Devuelve la ruta a este Document en notación JSON, que se utiliza para actualizaciones atómicas mediante $set en MongoDB.

Ejemplos:

Obtenga la ruta de este documento.

address.atomic_path

Devuelve:

  • (string)

    La ruta al documento en la base de datos.



161
162
163
# Archivo 'lib/mongoid/atomic.rb', línea 161

def atomic_path
  atomic_paths.ruta
end

#atomic_pathsObjeto

Obtenga la utilidad de rutas atómicas para este documento.

Ejemplos:

Obtén las rutas atómicas.

document.atomic_paths

Devuelve:

  • (objeto)

    La ruta asociada.



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_positionString

Devuelve el operador posicional de este documento para su modificación.

Ejemplos:

Obtiene el operador posicional.

address.atomic_position

Devuelve:

  • (string)

    El operador posicional con índices.



171
172
173
# Archivo 'lib/mongoid/atomic.rb', línea 171

def posición_atómica
  atomic_paths.posición
end

#atomic_pullsArray<Hash>

Obtener todos los atributos que deben extraerse.

Ejemplos:

Obtén las extracciones.

person.atomic_pulls

Devuelve:

  • (arreglo<Hash>)

    Las operaciones $pullAll.



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_pushesHash

Obtén todos los atributos push que se deben producir.

Ejemplos:

Obtén los pushes.

person.atomic_pushes

Devuelve:

  • (encriptada)

    Las operaciones $push y $each.



218
219
220
# Archivo 'lib/mongoid/atomic.rb', línea 218

def empujes atómicos
  pushable? ? { posición_atómica => as_attributes } : {}
end

#atomic_setsHash

Obtén todos los atributos que deben establecerse.

Ejemplos:

Consigue los conjuntos.

person.atomic_sets

Devuelve:

  • (encriptada)

    Las operaciones $set.



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_unsetsarreglo<Hash>

Obtenga todos los atributos que necesitan ser desactivados.

Ejemplos:

Obtén los unsets.

person.atomic_unsets

Devuelve:

  • (arreglo<Hash>)

    Las operaciones $unset.



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

Nota:

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

Ejemplos:

Obtenga las actualizaciones que deben ocurrir.

person.atomic_updates(children)

Devuelve:

  • (encriptada)

    Las actualizaciones y sus modificadores.



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_retardadosHash

Obtenga un hash de los pulls atómicos que están pendientes.

Ejemplos:

Consigue los pulls atómicos.

document.delayed_atomic_pulls

Devuelve:

  • (encriptada)

    parejas nombre/documento.



272
273
274
# Archivo 'lib/mongoid/atomic.rb', línea 272

def tirones atómicos retrasados
  @tirones atómicos retrasados ||= {}
end

#delayed_atomic_setsHash

Obtén todos los conjuntos atómicos cuyos guardados han sido retrasados.

Ejemplos:

Obtenga los conjuntos atómicos retrasados.

person.delayed_atomic_sets

Devuelve:

  • (encriptada)

    Los conjuntos retrasados.



262
263
264
# Archivo 'lib/mongoid/atomic.rb', línea 262

def delayed_atomic_sets
  @delayed_atomic_sets ||= {}
end

#delayed_atomic_unsetsHash

Obtén los desestablecimientos atómicos retrasados.

Ejemplos:

Obtén los desestablecimientos atómicos retrasados.

document.delayed_atomic_unsets

Devuelve:

  • (encriptada)

    Las anulaciones atómicas



282
283
284
# Archivo 'lib/mongoid/atomic.rb', línea 282

def puestas de sol atómicas retrasadas
  @delayed_atomic_unsets ||= {}
end

#flag_as_destroyedString

Marcar el documento como destruido y devolver la ruta atómica.

Ejemplos:

Indicador destruido y ruta de retorno.

document.flag_as_destroyed

Devuelve:

  • (string)

    El camino atómico.



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_destroysArray<Proc>

Obtenga las destrucciones marcadas.

Ejemplos:

Obtenga la destrucción marcada.

document.flagged_destroys

Devuelve:

  • (arreglo<Proc>)

    Lo marcado destruye.



304
305
306
# Archivo 'lib/mongoid/atomic.rb', línea 304

def flagged_destroys
  @flagged_destroys ||= []
end

#proceso_marcado_destruyeMatriz

Procesar todas las eliminaciones marcadas pendientes de los atributos anidados.

Ejemplos:

Procesa todas las destrucciones pendientes marcadas.

document.process_flagged_destroys

Devuelve:

  • (arreglo)

    El arreglo borrado.



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