Módulo: Mongoid::Positional

Incluido en:
Asociación::Incrustada::Agrupable, Contextual::Memoria, Persistente
Definido en:
lib/mongoid/posicional.rb

Overview

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

Resumen del método de instancia colapsar

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 darnos cuenta por el selector que estamos enviando si es realmente posible utilizar el operador posicional en absoluto. Por ejemplo, si el selector es: { “_id” => 1 }, entonces no podríamos usar el operador posicional para actualizar documentos incrustados, ya que nunca habrá una coincidencia; determinamos si podemos hacerlo según la cantidad de niveles que alcanza el selector y si los valores de id no 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 (encriptada)

    El selector.

  • Operaciones (encriptada)

    Las operaciones de actualización.

  • procesado (Hash) (por defecto: {})

    Las operaciones de actualización procesadas.

Devuelve:

  • (encriptada)

    Las nuevas operaciones.



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

def posicionalmente(selector, Operaciones, procesado = {})
  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 }
  process_operations(claves, Operaciones, procesado)
end