Módulo: Mongoide::Persistente::Upsertable

Incluido en:
Mongoid::Persistable
Definido en:
lib/mongoid/persistable/upsertable.rb

Overview

Define el comportamiento de las operaciones de persistencia que insertan documentos.

Colapso del resumen del método de instancia

Detalles del método de instancia

#upsert(opciones = {}) ⇒ verdadero

Realizar una inserción y actualización del documento. Si el documento no existe en la base de datos, Mongo insertará uno nuevo; de lo contrario, los campos se sobrescribirán con los nuevos valores del documento existente.

Si la opción de reemplazo es verdadera, se eliminarán los atributos no especificados; si es falsa, se conservarán. La opción de reemplazo tiene el valor predeterminado falso en Mongoid 9.

Ejemplos:

Insertar el documento.

document.upsert

Insertar el documento con reemplazar.

document.upsert(replace: true)

Insertar con atributos adicionales para usar durante la inserción.

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

Parámetros:

  • opciones (Hash) (predeterminado: {})

    Las opciones de validación.

Opciones Hash(opciones):

  • :validar (true | false)

    Si validar o no.

  • :reemplazar (true | false)

    Si reemplazar o no el documento al actualizar o insertar.

  • :set_on_insert (Hash)

    Los atributos a incluir si el documento aún no existe.

Devuelve:

  • (verdadero) -

    Verdadero.



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

def inserción(opciones = {})
  prepare_upsert(opciones) hacer
    Si opciones[:reemplazar]
      Si opciones[:set_on_insert]
        propagar ArgumentError, "no se puede especificar :set_on_insert con `replace: true`"
      end

      Colección.buscar(selector atómico).reemplazar_uno(
        como_atributos, inserción: true, sesión: _sesión)
    else
      attrs = { "$set" => como_atributos }
      attrs["$setOnInsert"] = opciones[:set_on_insert] Si opciones[:set_on_insert]

      Colección.buscar(selector atómico).update_one(
        attrs, inserción: true, sesión: _sesión)
    end
  end
end