Módulo: Mongoid::Positional

Incluido en:
Asociación::Incrustada::Agrupable, Contextual::Memoria, Persistente
Definido en:
lib/mongoid/positional.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:

La única vez 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 saber por el selector que estamos enviando si realmente es posible usar el operador posicional en absoluto. Por ejemplo, si el selector es: { "_id" => 1 }, entonces no podríamos utilizar el operador posicional para actualizar los documentos incrustados ya que nunca habría una coincidencia; determinamos si es posible en función del número de niveles de profundidad a los que llega el selector y si los valores de ID no son nulos.

Toma el selector y las operaciones atómicas proporcionados y reemplaza los índices de los documentos incrustados con el operador posicional cuando sea necesario.

Ejemplos:

Procesa 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 (encriptada) (por defecto: {})

    Las operaciones de actualización procesadas.

Devuelve:

  • (encriptada)

    Las nuevas operaciones.



31
32
33
34
35
36
37
# Archivo 'lib/mongoid/positional.rb', línea 31

def posicionalmente(selector, Operaciones, procesado = {})
  return Operaciones si selector.Tamaño == 1 || selector.values.any? { |val| val.nil? }

  claves = selector.claves.map { |m| m.sub('._id', '') } - [ '_id' ]
  claves = claves.ordenar_por { |s| s.longitud * -1 }
  process_operations(claves, Operaciones, procesado)
end