Módulo: Mongoid::Persistable::Upsertable

Incluído em:
Mongoid::Persistable
Definido em:
lib/mongoid/persistable/upsertable.rb

Visão geral

Define o comportamento para operações de persistência que atualizam documentos.

Recolhimento do Resumo do método de instância

Detalhes do método de instância

#upsert(options = {}) ➤ true

Execute um upsert do documento. Se o documento não existir no banco de banco de dados, o mongo inserirá um novo, caso contrário, os campos serão substituídos por novos valores no documento existente.

Se a opção de substituição for verdadeira, os atributos não especificados serão descartados e, se for falsa, os atributos não especificados serão mantidos. A opção de substituição tem como padrão falso no Mongoid 9.

Exemplos:

Upsert o documento.

document.upsert

Upserir o documento por substituição.

document.upsert(replace: true)

Upsert com atributos extras para usar ao inserir.

document.upsert(set_on_insert: { created_at: DateTime.now })

Parâmetros:

  • opções (Hash) (padrão para: {})

    As opções de validação.

Hash de opções (opções):

  • :validate (verdadeiro | falso)

    Se deve ou não validar.

  • :replace (verdadeiro | falso)

    Se deve ou não substituir o documento no upsert.

  • :set_on_insert (Hash)

    Os atributos a serem incluídos se o documento ainda não existir.

Retorna:

  • (verdadeiro)

    Verdade.



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# Arquivo 'lib/mongoid/persistable/upsertable.rb', linha 33

def upsert(opções = {})
  prepare_upsert(opções) fazer
    se opções[:replace]
      aumentar ArgumentError, 'não é possível especificar:set_on_insert com `substituir: verdadeiro' ' se opções[:set_on_insert]

      collection.find(atomic_selector).replace_one(
        as_attributes, upsert: true, sessão: _session
      )
    mais
      attrs = { '$set' => as_attributes }
      attrs['$setOnInsert'] = opções[:set_on_insert] se opções[:set_on_insert]

      collection.find(atomic_selector).update_one(
        attrs, upsert: true, sessão: _session
      )
    end
  end
end