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.



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

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

      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