Módulo: Mongoid::Association::Embedded::Batchable

Incluye:
Posicional
Incluido en:
IncrustacionesMuchas::Proxy
Definido en:
lib/mongoid/asociación/incrustado/batchable.rb

Overview

Contiene el comportamiento para ejecutar operaciones en lote en documentos incrustados.

Colapso del resumen del método de instancia

Métodos incluidos de Posicional

#posicionalmente

Detalles del método de instancia

#batch_clear(docs) ⇒ Matriz

Borre todos los documentos de la asociación de un solo golpe.

Ejemplos:

Borrar todos los documentos

batchable.batch_clear(docs)

Parámetros:

  • docs (Matriz)

    Los docs que se deben borrar.

Devuelve:

  • (Matriz)

    La matriz vacía.



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# Archivo 'lib/mongoid/association/embedded/batchable.rb', línea 35

def limpieza por lotes(docs)
  pre_procesar_eliminar_lote(docs, :borrar)
  a no ser que docs.¿vacío?
    Colección.buscar(selector).update_one(
      posicionalmente(selector, "$unset" => { ruta => true }),
      sesión: _sesión
    )
    # Esto resuelve el caso en el que un usuario establece, borra y restablece un
    # documento incrustado. Anteriormente, dado que el documento incrustado era
    # ya marcado como no "new_record", no se conservará
    # la segunda vez. Este cambio corrige este problema y permite que persista.
    docs.cada { |doc| doc.nuevo_registro = true }
    eliminación de lotes después del proceso(docs, :borrar)
  end
  _sin ámbito.borrar
end

#batch_insert(docs) ⇒ Array<Hash>

Inserte nuevos documentos como un push por lotes ($push con $each). Esto garantiza que todas las devoluciones de llamada se ejecuten en el momento oportuno y que solo se realice una solicitud 1 a la base de datos.

Ejemplos:

Ejecutar el push por lotes.

batchable.batch_insert([ doc_one, doc_two ])

Parámetros:

  • docs (Matriz)

    Los documentos para agregar.

Devuelve:

  • (Matriz<Hash>)

    Los insertos.



23
24
25
# Archivo 'lib/mongoid/association/embedded/batchable.rb', línea 23

def batch_insert(docs)
  ejecutar_lote_push(docs)
end

#batch_remove(docs, método =:delete) ⇒ Objeto

Elimine por lotes los documentos proporcionados como $pullAll o $pull.

Ejemplos:

Retire los documentos por lotes.

batchable.batch_remove([ doc_one, doc_two ])

Parámetros:

  • docs (Matriz)

    Los documentos a eliminar.

  • Método ( Símbolo) (predeterminado::eliminar)

    Eliminar o destruir.



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# Archivo 'lib/mongoid/association/embedded/batchable.rb', línea 59

def eliminación por lotes(docs, Método = :borrar)
  # Si el _id es nulo, no podemos usar $pull y eliminar buscando
  # el id. Por lo tanto, debemos usar pullAll con los documentos.
  # atributos.
  mudanzas = pre_procesar_eliminar_lote(docs, Método)
  tira, tirar_todos = mudanzas.dividir { |o| !o["_identificación"].nil? }

  Si !_base.¿persistió?
    eliminación de lotes después del proceso(docs, Método) a no ser que docs.¿vacío?
    return reindex
  end

  Si !docs.¿vacío?
    Si !tira.¿vacío?
      Colección.buscar(selector).update_one(
        posicionalmente(selector, "$pull" => { ruta => { "_identificación" => { "$en" => tira.arrancar("_identificación") } } }),
        sesión: _sesión
      )
    end
    Si !tirar_todos.¿vacío?
      Colección.buscar(selector).update_one(
        posicionalmente(selector, "$pullAll" => { ruta => tirar_todos }),
        sesión: _sesión
      )
    end
    eliminación de lotes después del proceso(docs, Método)
  else
    Colección.buscar(selector).update_one(
      posicionalmente(selector, "$set" => { ruta => [] }),
      sesión: _sesión
    )
  end
  reindex
end

#batch_replace(docs) ⇒ Array<Hash>

Reemplace por lotes los documentos proporcionados como un $set.

Ejemplos:

Reemplazar los documentos por lotes.

batchable.batch_replace([ doc_one, doc_two ])

Parámetros:

  • docs (Matriz | Matriz<Hash>)

    Los documentos a reemplazar.

Devuelve:

  • (Matriz<Hash>)

    Los insertos.



102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# Archivo 'lib/mongoid/association/embedded/batchable.rb', línea 102

def reemplazo por lotes(docs)
  Si docs.blank?
    Si ¿_asignando? && !¿vacío?
      _base.conjuntos atómicos retrasados.borrar(ruta)
      borrar_caché_de_ruta_atómica
      _base.añadir_desactivación_atómica(primera)
      duplicado de destino = _objetivo.dup
      pre_procesar_eliminar_lote(duplicado de destino, :borrar)
      eliminación de lotes después del proceso(duplicado de destino, :borrar)
    else
      eliminación por lotes(_objetivo.dup)
    end
  elsif _objetivo != docs
    _base.conjuntos atómicos retrasados.borrar(ruta) a no ser que ¿_asignando?
    docs = normalizar_docs(docs).compact
    _objetivo.borrar y  _sin ámbito.borrar
    _base.puestas de sol atómicas retrasadas.borrar(ruta)
    borrar_caché_de_ruta_atómica
    inserts = execute_batch_set(docs)
    agregar_conjuntos_atómicos(inserts)
  end
end