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
-
.extract_attribute(documento, clave) ⇒ objeto | arreglo
privado
Extrae valores de campo en el documento en la clave especificada.
-
.find_exact_key(hash, key) ⇒ String | Símbolo | nil
privado
Búsqueda de clave indiferente de string o símbolo, que devuelve la clave exacta.
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 campofooen el document actual. - Recorrido de campo hash/documento incrustado (
foo.bar): recupera el campofooen el document actual y después recupera el campobardel valor defoo. 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 campofoo, que debe ser un arreglo. N debe ser un número entero no negativo. - Recorrido de arreglos (
foo.bar) - sifooes un campo de arreglo y los elementos defooson hashes o documento incrustado, esto devuelve una matriz de los valores del campobaren cada uno de los hashes de la matrizfoo.
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.
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.
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 |