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

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.

Parámetros:

  • Documento (Documento | Hash | String)

    El documento a extraer de.

  • llave (string)

    La ruta clave a 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 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.

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 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 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