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

Incluye:
Posicional
Incluido en:
EmbedsMany::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)

    El arreglo vacío.



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

def batch_clear(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 soluciona el caso en el que un usuario establece, borra y restablece un
    # documento incrustado. Anteriormente, dado que el documento incrustado estaba
    # ya está marcado como no "nuevo_registro", no se persistiría en
    # la segunda vez. Este cambio soluciona eso y permite que persista.
    docs.cada { |doc| doc.nuevo_registro = true }
    post_process_batch_remove(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:

Ejecute el envío por agrupar.

batchable.batch_insert([ doc_one, doc_two ])

Parámetros:

  • docs (Array<documento>)

    Los Docs que añadir.

Devuelve:

  • (arreglo<Hash>)

    Los insertos.



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

def batch_insert(docs)
  execute_batch_push(docs)
end

#batch_remove(docs, method = :borrar) ⇒ objeto

Remueva por lotes los documentos proporcionados como un $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) (por defecto: :delete)

    Borrar o destruir.



57
58
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
# Archivo 'lib/mongoid/association/embedded/batchable.rb', línea 57

def batch_remove(docs, Método = borrar)
  # Si el _id es nulo, no podemos usar $pull y borrar buscando por
  # the ID. Por lo tanto, tenemos que utilizar pullAll con los documentos'
  # atributos.
  eliminaciones = pre_process_batch_remove(docs, Método)
  extracciones, pull_alls = eliminaciones.partición { |o| !o['_id'].nil? }

  a menos que _base.¿persistió?
    post_process_batch_remove(docs, Método) a menos que docs.¿vacío?
    return reindex
  end

  si docs.¿vacío?
    Colección.buscar(selector).update_one(
      posicionalmente(selector, '$set' => { ruta => [] }),
      sesión: _sesión
    )
  else
    a menos que extracciones.¿vacío?
      Colección.buscar(selector).update_one(
        posicionalmente(selector, '$pull' => { ruta => { '_id' => { '$in' => extracciones.pluck('_id') } } }),
        sesión: _sesión
      )
    end
    a menos que pull_alls.¿vacío?
      Colección.buscar(selector).update_one(
        posicionalmente(selector, '$pullAll' => { ruta => pull_alls }),
        sesión: _sesión
      )
    end
    post_process_batch_remove(docs, Método)
  end
  reindex
end

#batch_replace(docs) ⇒ Arreglo<Hash>

Reemplaza los documentos proporcionados agrupados como un $set.

Ejemplos:

Agrupar y reemplazar los documentos.

batchable.batch_replace([ doc_one, doc_two ])

Parámetros:

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

    Los Docs con los que reemplazar.

Devuelve:

  • (arreglo<Hash>)

    Los insertos.



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

def reemplazo por lotes(docs)
  si docs.blank?
    si ¿_asignando? && !¿vacío?
      _base.delayed_atomic_sets.borrar(ruta)
      clear_atomic_path_cache
      _base.add_atomic_unset(primero)
      target_duplicate = _target.dup
      pre_process_batch_remove(target_duplicate, borrar)
      post_process_batch_remove(target_duplicate, borrar)
    else
      batch_remove(_target.dup)
    end
  elsif _target != docs
    _base.delayed_atomic_sets.borrar(ruta) a menos que ¿_asignando?
    docs = normalize_docs(docs).compact
    _target.borrar y  _unscoped.borrar
    _base.delayed_atomic_unsets.borrar(ruta)
    clear_atomic_path_cache
    inserts = execute_batch_set(docs)
    add_atomic_sets(inserts)
  end
end