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 forma parte de una API privada. Debe evitar su uso siempre que sea posible, ya que podría eliminarse o modificarse 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: Todo, Y, Bits, BitsAllClear, BitsAllSet, BitsAnyClear, BitsAnySet, ElemMatch, ElemMatchExpression, Eq, EqImpl, EqImplWithRegexp, Existe, Expresión, ExpressionOperator, FieldExpression, FieldOperator, Gt, Gte, In, Lt, Lte, Mod, Ne, Nin, Nor, Not, Or, 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 | Matriz
Este método forma parte de una API privada. Debe evitarlo 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 sencillo de campo ('foo') - recupera el campo 'foo' en el documento actual.
-
Recorrido de campo de documento hash/incrustado ('foo.bar`): recupera el campo `foo` del documento actual y, a continuación, recupera el campo `bar` del valor de `foo`. Cada segmento de ruta puede descender a un documento incrustado o a un campo hash.
-
Recuperación de elementos de matriz ('foo.N`): recupera el enésimo elemento de la matriz del campo `foo`, que debe ser una matriz. N debe ser un entero no negativo.
-
Recorrido de arreglo (‘foo.bar`) - si `foo` es un campo de arreglo y los elementos de `foo` son hashes o documentos incrustados, esto devuelve un arreglo de valores del campo `bar` en cada uno de los hashes del arreglo `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.
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 93 94 95 96 97 98 99 100 |
# Archivo 'lib/mongoid/matcher.rb', línea 46 module_function def extract_attribute(Documento, llave) # El sistema de comparación también terminará enviando valores atómicos a esto. # 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 # devuelve una matriz vacía. return [] a menos que Documento.is_a?(Picadillo) || 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á 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 Picadillo actual_key = Encontrar llave exacta(doc, Campo) si !actual_key.nil? Nuevo << doc[actual_key] end Cuando Arreglo si (index = Campo.to_i).to_s == Campo si doc.longitud > index Nuevo << doc[index] end end doc.cada hacer |subdoc| si Picadillo === subdoc actual_key = Encontrar llave exacta(subdoc, Campo) si !actual_key.nil? Nuevo << subdoc[actual_key] end 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 forma parte de una API privada. Debe evitarlo 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.
108 109 110 111 112 113 114 |
# Archivo 'lib/mongoid/matcher.rb', línea 108 module_function def Encontrar llave exacta(hash, llave) llaves = llave.to_s return llaves si hash.key?(llaves) key_sym = llave.to_sym hash.key?(key_sym) ? key_sym : nulo end |