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

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.

Parámetros:

  • Documento (Documento | Hash | String)

    El documento del que se extraerá.

  • clave (Cadena) -

    La ruta clave para extraer.

Devuelve:

  • (Objeto| Matriz)

    Valor o valores del campo.



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.

Parámetros:

  • hash (Hash)

    El hash de entrada.

  • clave (Cadena | Símbolo)

    La clave para realizar búsquedas indiferentes con.

Devuelve:

  • (Cadena | Símbolo | nulo ) —

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



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