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

Detalles del método de instancia

#add_atomic_pull(documento) ⇒ Objeto

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

Ejemplos:

Añade la atracción atómica.

person.add_atomic_pull(address)

Parámetros:

  • Documento (Documento) -

    El documento incrustado para extraer.



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.

Ejemplos:

Añade un conjunto atómico.

document.add_atomic_unset(doc)

Parámetros:

  • Documento (Documento) -

    El documento infantil.

Devuelve:



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_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:

  • (Hash)

    La matriz add_to_sets.



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_pullsHash

Para los campos de matriz, estas son las extracciones que deben realizarse.

Ejemplos:

Obtener las extracciones de la matriz.

person.atomic_array_pulls

Devuelve:

  • (Hash)

    La matriz 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:

Obtener los empujes de la matriz.

person.atomic_array_pushes

Devuelve:

  • (Hash)

    La matriz empuja.



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.

Ejemplos:

Obtener la ruta del atributo

address.atomic_attribute_name(:city)

Devuelve:

  • (Cadena) -

    La ruta al atributo del documento en la base de datos



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

def nombre_del_atributo_atómico(Nombre)
  ¿incorporado? ? "#{posición_atómica}.#{nombre}" : Nombre
end

#atomic_delete_modifierString

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

Ejemplos:

Consiga el operador de mudanzas.

name.atomic_delete_modifier

Devuelve:

  • (Cadena) -

    La operación de tirar o desarmar.



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

def atomic_delete_modifier
  rutas atómicas.eliminar_modificador
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:

  • (Cadena) -

    El operador de tracción o de ajuste.



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

def atomic_insert_modifier
  rutas atómicas.insert_modifier
end

#ruta_atómicaCadena

Devuelve la ruta a este Document en notación JSON, utilizada para actualizaciones atómicas a través de $set en MongoDB.

Ejemplos:

Obtenga la ruta a este documento.

address.atomic_path

Devuelve:

  • (Cadena) -

    La ruta al documento en la base de datos.



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

def ruta atómica
  rutas atómicas.ruta
end

#atomic_pathsObjeto

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

Ejemplos:

Obtener 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 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ómicaCadena

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

Ejemplos:

Obtiene el operador posicional.

address.atomic_position

Devuelve:

  • (Cadena) -

    El operador posicional con índices.



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

def posición atómica
  rutas atómicas.posición
end

#atomic_pullsMatriz<Hash>

Obtenga todos los atributos que se necesitan extraer.

Ejemplos:

Consigue los tirones.

person.atomic_pulls

Devuelve:

  • (Matriz<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
  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_pushesHash

Obtenga todos los atributos push que deben ocurrir.

Ejemplos:

Recibe los empujones.

person.atomic_pushes

Devuelve:

  • (Hash)

    Las operaciones $push y $each.



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ómicosHash

Obtenga todos los atributos que deben configurarse.

Ejemplos:

Consigue los conjuntos.

person.atomic_sets

Devuelve:

  • (Hash)

    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?
    setters
  elsif ¿configurable?
    { ruta atómica => como_atributos }
  else
    {}
  end
end

#atomic_unsetsarreglo<Hash>

Obtenga todos los atributos que deben desactivarse.

Ejemplos:

Consigue los unsets.

person.atomic_unsets

Devuelve:

  • (Matriz<Hash>)

    Las operaciones $unset.



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

Nota:

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

Ejemplos:

Obtenga las actualizaciones que deben ocurrir.

person.atomic_updates(children)

Devuelve:

  • (Hash)

    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, yo)
  _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 tirones atómicos.

document.delayed_atomic_pulls

Devuelve:

  • (Hash)

    pares nombre/documento.



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

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

#conjuntos atómicos retrasadosHash

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

Ejemplos:

Obtenga los conjuntos atómicos retrasados.

person.delayed_atomic_sets

Devuelve:

  • (Hash)

    Los $sets retrasados.



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

def conjuntos atómicos retrasados
  @delayed_atomic_sets ||= {}
end

#retrasos_atómicos_desactivadosHash

Obtenga los desajustes atómicos retrasados.

Ejemplos:

Obtenga los desajustes atómicos retrasados.

document.delayed_atomic_unsets

Devuelve:

  • (Hash)

    Las anulaciones atómicas



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_destruidaCadena

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

Ejemplos:

Bandera destruida y camino de retorno.

document.flag_as_destroyed

Devuelve:

  • (Cadena) -

    El camino atómico.



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

Obtenga las destrucciones marcadas.

Ejemplos:

Obtenga la destrucción marcada.

document.flagged_destroys

Devuelve:

  • (Matriz<Proc>)

    Lo marcado destruye.



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

def marcado_destruye
  @flagged_destroys ||= []
end

#proceso_marcado_destruyeMatriz

Procesar todas las destrucciones marcadas pendientes de los atributos anidados.

Ejemplos:

Procesar todas las destrucciones marcadas pendientes.

document.process_flagged_destroys

Devuelve:

  • (Matriz)

    El arreglo borrado.



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