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
-
#batch_clear(docs) ⇒ Array
Elimina todos los Docs de la asociación de una sola vez.
-
#batch_insert(docs) ⇒ Array<Hash>
Insertar nuevos documentos como una inserción agrupada ($push con $each).
-
#batch_remove(docs, method = :borrar) ⇒ objeto
Remueva por lotes los documentos proporcionados como un $pullAll o $pull.
-
#batch_replace(docs) ⇒ arreglo<Hash>
Reemplaza los documentos proporcionados agrupados como un $set.
Métodos incluidos desde Positional
Detalles del método de instancia
#batch_clear(docs) ⇒ Array
Elimina todos los Docs de la asociación de una sola vez.
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.
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.
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.
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 |