Módulo: Mongoid::Matcher Privado

Definido en:
lib/mongoid/matcher.rb,
lib/mongoid/matcher/eq.rb,
lib/mongoid/matcher/gt.rb,
lib/mongoid/matcher/in.rb,
lib/mongoid/matcher/lt.rb,
lib/mongoid/matcher/ne.rb,
lib/mongoid/matcher/or.rb,
lib/mongoid/matcher/all.rb,
lib/mongoid/matcher/and.rb,
lib/mongoid/matcher/gte.rb,
lib/mongoid/matcher/lte.rb,
lib/mongoid/matcher/mod.rb,
lib/mongoid/matcher/nin.rb,
lib/mongoid/matcher/nor.rb,
lib/mongoid/matcher/not.rb,
lib/mongoid/matcher/bits.rb,
lib/mongoid/matcher/size.rb,
lib/mongoid/matcher/type.rb,
lib/mongoid/matcher/regex.rb,
lib/mongoid/matcher/exists.rb,
lib/mongoid/matcher/eq_impl.rb,
lib/mongoid/matcher/elem_match.rb,
lib/mongoid/matcher/expression.rb,
lib/mongoid/matcher/bits_all_set.rb,
lib/mongoid/matcher/bits_any_set.rb,
lib/mongoid/matcher/bits_all_clear.rb,
lib/mongoid/matcher/bits_any_clear.rb,
lib/mongoid/matcher/field_operator.rb,
lib/mongoid/matcher/field_expression.rb,
lib/mongoid/matcher/eq_impl_with_regexp.rb,
lib/mongoid/matcher/expression_operator.rb,
lib/mongoid/matcher/elem_match_expression.rb

Overview

Este módulo es parte de una API privada. Deberías evitar usar este módulo si es posible, ya que puede ser removido o cambiado en el futuro.

Módulo utilitario que contiene métodos que ayudan a realizar la vinculación en memoria de documentos con expresiones de query MQL.

Definido bajo Namespace

Modules: Todos, Y, Bits, BitsAllClear, BitsAllSet, BitsAnyClear, BitsAnySet, ElemMatch, ElemMatchExpression, Eq, EqImpl, EqImplWithRegexp, Exists, Expression, Operador de expresión, Expresión de campo, FieldOperator, Gt, Gte, In, Lt, Lte, Mod, Ne, Nin, Nor, No, O, Regex, Tamaño, Tipo

Resumen del método de clase colapsar

Detalles del método de clase

.extract_attribute(documento, clave) ⇒ objeto | arreglo

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Extrae valores de campo en el documento en la clave especificada.

El documento puede ser un Hash o una instancia de modelo.

La clave es una clave válida de notación de puntos de MongoDB. Se admiten los siguientes casos de uso:

  • Recorrido de campo simple (foo) - recupera el campo foo en el document actual.
  • Recorrido de campo hash/documento incrustado (foo.bar): recupera el campo foo en el document actual y después recupera el campo bar del valor de foo. Cada segmento de la ruta podría descender a un documento incrustado o a un campo hash.
  • Obtención de elemento de arreglo (foo.N) - recupera el N-ésimo elemento del arreglo del campo foo, que debe ser un arreglo. N debe ser un número entero no negativo.
  • Recorrido de arreglos (foo.bar) - si foo es un campo de arreglo y los elementos de foo son hashes o documento incrustado, esto devuelve una matriz de los valores del campo bar en cada uno de los hashes de la matriz foo.

Este método puede devolver el valor de un campo individual en algún documento o un arreglo de valores de múltiples documentos. El arreglo se puede devolver porque un valor de campo en la ruta especificada es un arreglo de valores primitivos (por ejemplo, enteros), o porque el valor de un campo en la ruta especificada es un arreglo de documentos (por ejemplo, una asociación incrustada uno a muchos), en cuyo caso el valor hoja puede ser un escalar para cada documento individual. Si el valor hoja es un arreglo y se atravesó una asociación de uno a muchos, el valor de retorno será un arreglo de arreglos. Tenga en cuenta que el valor de un campo individual también puede ser un arreglo y este caso es indistinguible y se comporta idénticamente a la búsqueda de asociaciones a efectos, por ejemplo, de la recuperación posterior de elementos del arreglo.

Parámetros:

  • Documento (Documento | Hash | String)

    El documento a extraer de.

  • llave (string)

    La ruta clave a extraer.

Devuelve:

  • (objeto | arreglo)

    Valor o valores del campo.



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# Archivo 'lib/mongoid/matcher.rb', línea 44

module_function def extract_attribute(Documento, llave)
  # El sistema de comparación terminará enviando valores atómicos a esto también,
  # al intentar hacer coincidir tipos más complejos. Si cualquier cosa que no sea un
  # Documento o un hash, cortaremos la lógica y solo
  # devuelva un arreglo vacío.
  return [] a menos que Documento.is_a?(encriptada) || Documento.is_a?(Documento)

  # Optimización del rendimiento; si la clave no incluye un carácter '. ',
  # debe hacer referencia a un atributo inmediato del documento.
  a menos que llave.incluir?('.')
    hash = Documento.respond_to?(atributos) ? Documento.atributos : Documento
    llave = Encontrar llave exacta(hash, llave)
    return llave ? [ hash[llave] ] : []
  end

  si Documento.respond_to?(.como_atributos, true)
    # Si un documento tiene campos hash, as_attributes mantendría esos campos
    # como instancias de Hash que no ofrecen acceso indiferente.
    #  Convertir a BSON::Document para obtener acceso indiferente a los campos del hash.
    Documento = Documento.enviar(.como_atributos)
  end

  Actual = [ Documento ]

  llave.to_s.división('.').cada hacer |Campo|
    Nuevo = []
    Actual.cada hacer |doc|
      caso doc
      cuando encriptada
        actual_key = Encontrar llave exacta(doc, Campo)
        Nuevo << doc[actual_key] a menos que actual_key.nil?
      cuando Arreglo
        si ((index = Campo.to_i).to_s == Campo) && (doc.longitud > index)
          Nuevo << doc[index]
        end
        doc.cada hacer |subdoc|
          si subdoc.is_a?(encriptada)
            actual_key = Encontrar llave exacta(subdoc, Campo)
            Nuevo << subdoc[actual_key] a menos que actual_key.nil?
          end
        end
      end
    end
    Actual = Nuevo
    break si Actual.¿vacío?
  end

  Actual
end

.find_exact_key(hash, key) ⇒ String | Symbol | nil

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Búsqueda de clave indiferente de string o símbolo, que devuelve la clave exacta.

Parámetros:

  • hash (encriptada)

    El hash de entrada.

  • llave (String | Símbolo)

    La clave para realizar búsquedas indiferentes con.

Devuelve:

  • (String | Símbolo | nil)

    La clave exacta (con el tipo correcto) que existe en el hash, o nil si la clave no existe.



100
101
102
103
104
105
106
# Archivo 'lib/mongoid/matcher.rb', línea 100

module_function def Encontrar llave exacta(hash, llave)
  key_s = llave.to_s
  return key_s si hash.key?(key_s)

  key_sym = llave.to_sym
  hash.key?(key_sym) ? key_sym : nulo
end