Módulo: Mongoid::Persistable::Upsertable

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

Overview

Define el comportamiento para las operaciones de persistencia que realizan una inserción de documentos.

Resumen del método de instancia colapsar

Detalles del método de instancia

#inserción(options = {}) ⇒ true

Realiza una operación de inserció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 nuevos valores en el documento existente.

Si la opción de reemplazo está activada, los atributos no definidos se descartarán y, si está desactivada, los atributos no definidos se mantendrán. Por defecto, la opción replace está en false en Mongoid 9.

Ejemplos:

Realiza una inserción en el documento.

document.upsert

Actualizar el documento con reemplazo.

document.upsert(replace: true)

Inserción con atributos extra para usar al insertar.

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

Parámetros:

  • opciones (encriptada) (por defecto: {})

    Las opciones de validación.

Opciones Hash (options):

  • : valide (true | false)

    Si se va a validar o no.

  • sustituir (true | false)

    Si se debe reemplazar o no el documento al realizar una actualización/inserción (upsert).

  • :set_on_insert (encriptada)

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

Devuelve:

  • (cierto)

    Verdadero.



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

def inserción(opciones = {})
  prepare_upsert(opciones) hacer
    si opciones[sustituir]
      propagar ArgumentError, 'no se puede especificar :set_on_insert con `replace: true`' si opciones[:set_on_insert]

      Colección.buscar(atomic_selector).replace_one(
        as_attributes, inserción: true, sesión: _sesión
      )
    else
      attrs = { '$set' => as_attributes }
      attrs['$setOnInsert'] = opciones[:set_on_insert] si opciones[:set_on_insert]

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