Módulo: Mongoid::Association::Embedded::Batchable
- Inclui:
- Posicional
- Incluído em:
- EmbedsMany::Proxy
- Definido em:
- lib/mongoid/association/embedded/batchable.rb
Visão geral
Contém comportamento para executar operações em lote em documentos incorporados.
Recolhimento do Resumo do método de instância
-
#batch_clear(Docs) ➤ Array
Limpe todos os Docs da associação com um único deslize.
-
#batch_insert(docs) ⇒ Array<Hash>
Insira novos documentos como um push em lote ($push com $each).
-
#batch_remove(Docs, method = :delete) ➤ Object
Remova em lote os documentos fornecidos como $pullAll ou $pull.
-
#batch_replace(Docs) ➤ Array<Hash>
Substitua em lote os documentos fornecidos como $set.
Métodos incluídos no Posicional
Detalhes do método de instância
#batch_clear(Docs) ➤ Array
Limpe todos os Docs da associação com um único deslize.
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/mongoid/association/embedded/batchable.rb', linha 33 def batch_clear(Docs) pre_process_batch_remove(Docs, :delete) a menos que Docs.vazio? collection.find(seletor).update_one( posicionalmente(seletor, '$unset' => { caminho => true }), sessão: _session ) # Isso resolve o caso em que um usuário define, limpa e redefine um #documento documento incorporado. Anteriormente, como o documento incorporado era # já marcado como "new_record", não seria mantido para # a segunda vez. Esta alteração corrige isso e permite que ela seja persistente. Docs.cada { |doc| doc.new_record = true } post_process_batch_remove(Docs, :delete) end _unscoped.Limpar end |
#batch_insert(docs) ⇒ Array<Hash>
Insira novos documentos como um push em lote ($push com $each). Isso garante que todas as chamadas de resposta sejam executadas no momento apropriado e que somente a solicitação 1 seja feita ao banco de banco de dados.
21 22 23 |
# File 'lib/mongoid/association/embedded/batchable.rb', linha 21 def batch_insert(Docs) execute_batch_push(Docs) end |
#batch_remove(Docs, method = :delete) ➤ Object
Remova em lote os documentos fornecidos como $pullAll ou $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 |
# File 'lib/mongoid/association/embedded/batchable.rb', linha 57 def batch_remove(Docs, Método = :delete) # Se _id for nulo, não podemos usar $pull e excluir procurando por # o ID. Portanto, temos que usar pullAll com os documentos # atributos. remoções = pre_process_batch_remove(Docs, Método) puxa, pull_alls = remoções.Partição { |o| !o['_id'].nada? } a menos que _base.persistiu? post_process_batch_remove(Docs, Método) a menos que Docs.vazio? Método reIndexar end se Docs.vazio? collection.find(seletor).update_one( posicionalmente(seletor, '$set' => { caminho => [] }), sessão: _session ) mais a menos que puxa.vazio? collection.find(seletor).update_one( posicionalmente(seletor, '$pull' => { caminho => { '_id' => { '$in' => puxa.raspar('_id') } } }), sessão: _session ) end a menos que pull_alls.vazio? collection.find(seletor).update_one( posicionalmente(seletor, '$pullAll' => { caminho => pull_alls }), sessão: _session ) end post_process_batch_remove(Docs, Método) end reIndexar end |
#batch_replace(Docs) ➤ Array<Hash>
Substitua em lote os documentos fornecidos como $set.
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/mongoid/association/embedded/batchable.rb', linha 100 def batch_replace(Docs) se Docs.em branco? se _assigning? && !vazio? _base.delay_atomic_sets.excluir(caminho) clear_atomic_path_cache _base.add_atomic_unset(primeiro) target_duplicate = _target.dup pre_process_batch_remove(target_duplicate, :delete) post_process_batch_remove(target_duplicate, :delete) mais batch_remove(_target.dup) end elsif _target != Docs _base.delay_atomic_sets.excluir(caminho) a menos que _assigning? Docs = normalize_docs(Docs).compactar _target.Limpar e a _unscoped.Limpar _base.delay_atomic_unsets.excluir(caminho) clear_atomic_path_cache Inserções = execute_batch_set(Docs) add_atomic_sets(Inserções) end end |