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

Métodos incluídos no Posicional

#positionalmente

Detalhes do método de instância

#batch_clear(Docs) ➤ Array

Limpe todos os Docs da associação com um único deslize.

Exemplos:

Limpar todos os Docs.

batchable.batch_clear(docs)

Parâmetros:

  • Docs (Array <Document>)

    Os Docs a serem limpos.

Retorna:

  • (Array)

    A array vazia.



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.

Exemplos:

Execute o push em lote .

batchable.batch_insert([ doc_one, doc_two ])

Parâmetros:

  • Docs (Array <Document>)

    Os Docs a serem adicionados.

Retorna:

  • (Array<Hash>)

    As inserções.



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.

Exemplos:

Remova os documentos em lote.

batchable.batch_remove([ doc_one, doc_two ])

Parâmetros:

  • Docs (Array <Document>)

    Os Docs a serem removidos.

  • Método (Símbolo) (padrão para: :delete)

    Excluir ou 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
# 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.

Exemplos:

Substitua os documentos em lote.

batchable.batch_replace([ doc_one, doc_two ])

Parâmetros:

  • Docs (Array <Documento> | Array<Hash>)

    Os Docs pelos quais substituir.

Retorna:

  • (Array<Hash>)

    As inserções.



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