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.
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/mongoid/association/embedded/batchable.rb', linha 35 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.
23 24 25 |
# File 'lib/mongoid/association/embedded/batchable.rb', linha 23 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.
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 |
# File 'lib/mongoid/association/embedded/batchable.rb', linha 59 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? } se !_base.persistiu? post_process_batch_remove(Docs, Método) a menos que Docs.vazio? Método reIndexar end se !Docs.vazio? se !puxa.vazio? collection.find(seletor).update_one( posicionalmente(seletor, "$pull" => { caminho => { "_id" => { "$in" => puxa.raspar("_id") } } }), sessão: _session ) end se !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) mais collection.find(seletor).update_one( posicionalmente(seletor, "$set" => { caminho => [] }), sessão: _session ) end reIndexar end |
#batch_replace(Docs) ➤ Array<Hash>
Substitua em lote os documentos fornecidos como $set.
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/mongoid/association/embedded/batchable.rb', linha 102 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 |