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

Incluye:
Posicional
Incluido en:
IncrustacionesMuchas::Proxy
Definido en:
lib/mongoid/association/embedded/batchable.rb

Overview

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

Resumen del método de instancia colapsar

Métodos incluidos desde Positional

#posicionalmente

Detalles del método de instancia

#batch_clear(docs) ⇒ Array

Elimina todos los Docs de la asociación de una sola vez.

Ejemplos:

Borrar todos los docs.

batchable.batch_clear(docs)

Parámetros:

  • docs (Array<documento>)

    Los docs que se deben borrar.

Devuelve:

  • (arreglo)

    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_process_batch_remove(docs, borrar)
  a menos 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 está marcado como no "nuevo_registro", no se persistiría en
    # 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
  _unscoped.borrar
end

#batch_insert(docs) ⇒ Array<Hash>

Inserte nuevos documentos como una inserción agrupada ($push con $each). Esto garantiza que todas las devoluciones de llamada se ejecuten en el momento adecuado y que solo se realice 1 solicitud a la base de datos.

Ejemplos:

Ejecutar el push por lotes.

batchable.batch_insert([ doc_one, doc_two ])

Parámetros:

  • docs (Array<documento>)

    Los documentos para agregar.

Devuelve:

  • (arreglo<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, method = :borrar) ⇒ objeto

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

Ejemplos:

Agrupar remover los documentos.

batchable.batch_remove([ doc_one, doc_two ])

Parámetros:

  • docs (Array<documento>)

    Los Docs que se deben eliminar.

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

    Borrar 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 borrar buscando por
  # el id. Por lo tanto, debemos usar pullAll con los documentos.
  # atributos.
  eliminaciones = pre_process_batch_remove(docs, Método)
  extracciones, tirar_todos = eliminaciones.partición { |o| !o["_identificación"].nil? }

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

  si !docs.¿vacío?
    si !extracciones.¿vacío?
      Colección.buscar(selector).update_one(
        posicionalmente(selector, "$pull" => { ruta => { "_identificación" => { "$in" => extracciones.pluck("_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) ⇒ Arreglo<Hash>

Reemplace por lotes los documentos proporcionados como un $set.

Ejemplos:

Agrupar y reemplazar los documentos.

batchable.batch_replace([ doc_one, doc_two ])

Parámetros:

  • docs (arreglo<Documento> | arreglo<Hash>)

    Los documentos a reemplazar.

Devuelve:

  • (arreglo<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.delayed_atomic_sets.borrar(ruta)
      borrar_caché_de_ruta_atómica
      _base.add_atomic_unset(primero)
      target_duplicate = _objetivo.dup
      pre_process_batch_remove(target_duplicate, borrar)
      eliminación de lotes después del proceso(target_duplicate, borrar)
    else
      eliminación por lotes(_objetivo.dup)
    end
  elsif _objetivo != docs
    _base.delayed_atomic_sets.borrar(ruta) a menos que ¿_asignando?
    docs = normalizar_docs(docs).compact
    _objetivo.borrar y  _unscoped.borrar
    _base.puestas de sol atómicas retrasadas.borrar(ruta)
    borrar_caché_de_ruta_atómica
    inserts = execute_batch_set(docs)
    add_atomic_sets(inserts)
  end
end