Módulo: Mongoid::Matcher Private
- 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 de utilidad que contiene métodos que ayudan a realizar la coincidencia en memoria de documentos con expresiones de consulta MQL.
Definido en el espacio de nombres
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
Colapso delresumen del método de clase
-
.extract_attribute(documento, clave) ⇒ Objeto | Matriz
privada
Extrae valores de campo en el documento en la clave especificada.
-
.find_exact_key(hash, clave) ⇒ Cadena | Símbolo | nulo
privada
Búsqueda de clave de cadena o símbolo indiferente, 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 de campo simple ('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 matriz ('foo.bar`): si `foo` es un campo de matriz y los elementos de `foo` son hashes o documentos incrustados, esto devuelve una matriz de valores del campo `bar` en cada uno de los hashes de la matriz `foo`.
Este método puede devolver un valor de campo individual en un documento o una matriz de valores de varios documentos. La matriz puede devolverse porque un valor de campo en la ruta especificada es una matriz de valores primitivos (p. ej., enteros) o porque un valor de campo en la ruta especificada es una matriz de documentos (p. ej., una asociación incrustada de uno a muchos); en cuyo caso, el valor de hoja puede ser un escalar para cada documento individual. Si el valor de hoja es una matriz y se recorrió una asociación de uno a muchos, el valor de retorno será una matriz de matrices. Tenga en cuenta que un valor de campo individual también puede ser una matriz, y este caso es indistinguible y se comporta de forma idéntica al recorrido de la asociación para, por ejemplo, la posterior recuperación de elementos de la matriz.
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 extraer_atributo(Documento, clave) # El sistema de comparación también terminará enviando valores atómicos a esto. # al intentar hacer coincidir tipos más complejos. Si hay algo distinto a un # Si se proporciona un documento o un hash, cortocircuitaremos la lógica y simplemente # devuelve una matriz vacía. return [] a no ser 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 no ser que clave.¿incluir?('.') hash = Documento.respond_to?(:atributos) ? Documento.atributos : Documento clave = encontrar_clave_exacta(hash, clave) return clave ? [ hash[clave] ] : [] end Si Documento.respond_to?(:como_atributos, true) # Si un documento tiene campos hash, as_attributes mantendrá esos campos # como instancias Hash que no ofrecen acceso indiferente. # Convierta a BSON::Document para obtener acceso indiferente a los campos hash. Documento = Documento.Enviar(:como_atributos) end actual = [Documento] clave.a_s.división('.').cada hacer |Campo| Nuevo = [] actual.cada hacer |doc| caso doc Cuando Picadillo actual_key = encontrar_clave_exacta(doc, Campo) Si !actual_key.nil? Nuevo << doc[actual_key] end Cuando Arreglo Si (index = Campo.to_i).a_s == Campo Si doc.longitud > index Nuevo << doc[index] end end doc.cada hacer |subdoc| Si Picadillo === subdoc actual_key = encontrar_clave_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, clave) ⇒ Cadena | Símbolo | nulo
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 de cadena o símbolo indiferente, que devuelve la clave exacta.
108 109 110 111 112 113 114 |
# Archivo 'lib/mongoid/matcher.rb', línea 108 module_function def encontrar_clave_exacta(hash, clave) llaves = clave.a_s return llaves Si hash.key?(llaves) símbolo_clave = clave.a_sym hash.key?(símbolo_clave) ? símbolo_clave : nulo end |