Módulo: Mongoid::Positional

Incluido en:
Asociación::Incorporado::Por lotes, Contextual::Memoria, Persistable
Definido en:
lib/mongoid/posicional.rb

Overview

Este módulo es responsable de tomar los selectores de actualización y cambiar los índices para el operador posicional $ cuando sea apropiado.

Colapso del resumen del método de instancia

Detalles del método de instancia

#posicionalmente(selector, operaciones, procesado = { }) ⇒ Hash

Nota:

El único momento en que podemos saber con precisión cuándo usar el operador posicional es en el momento exacto en que vamos a persistir algo. Por lo tanto, podemos determinar, mediante el selector que enviamos, si es posible usar el operador posicional. Por ejemplo, si el selector es: { “_id” => 1 }, no podríamos usar el operador posicional para actualizar documentos incrustados, ya que nunca habría una coincidencia. Para determinar si es posible, nos basamos en el número de niveles de profundidad del selector y si los valores de id son nulos.

Toma el selector proporcionado y las operaciones atómicas y reemplaza los índices de los documentos integrados con el operador posicional cuando es necesario.

Ejemplos:

Procesar las operaciones.

positionally(
  { "_id" => 1, "addresses._id" => 2 },
  { "$set" => { "addresses.0.street" => "hobrecht" }}
)

Parámetros:

  • selector (Hash)

    El selector.

  • Operaciones (Hash)

    Las operaciones de actualización.

  • procesados (Hash) (predeterminado: {})

    Las operaciones de actualización procesadas.

Devuelve:

  • (Hash)

    Las nuevas operaciones.



34
35
36
37
38
39
40
41
# Archivo 'lib/mongoid/positional.rb', línea 34

def posicionalmente(selector, Operaciones, procesados = {})
  Si selector.tamaño == 1 || selector.values.any? { |val| val.nil? }
    return Operaciones
  end
  claves = selector.claves.map{ |m| m.sub('._id','') } - ['_id']
  claves = claves.Ordenar por { |s| s.longitud*-1 }
  operaciones_de_proceso(claves, Operaciones, procesados)
end