Módulo: Mongoid::Matcher Private

Definido em:
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/ expressão.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

Visão geral

Este módulo faz parte de uma API privada. Você deve evitar usar este módulo, se possível, pois ele pode ser removido ou alterado no futuro.

Módulo utilitário que contém métodos que ajudam a realizar a correspondência de documentos na memória com expressões de query MQL .

Definido sob namespace

Módulos: Todos, E, Bits, BitsAllClear, BitsAllSet, BitsAnyClear, BitsAnySet, ElemMatch, ElemMatchExpression, Eq, EqImpl, EqImplWithRegexp, Exists, Expression, ExpressionOperator, FieldExpression, FieldOperator, Gt, Gte, In, Lt, Lte, Mod, Ne, Nin, Nem, Não ou, Regex, Tamanho, Tipo

Recolhimento do Resumo do método de classe

Detalhes do método de classe

.extract_attribute(documento, chave) ➤ Objeto | Array

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Extrai valores de campo no documento na chave especificada.

O documento pode ser um Hash ou uma instância de modelo.

A chave é uma chave de notação de ponto MongoDB válida. Os seguintes casos de uso são compatíveis:

  • Traversal simples de campo ('foo') - recupera o campo `foo' no documento atual.

  • Hash/travessia do campo de documento incorporado ('foo.bar') - recupera o campo `foo' no documento atual e, em seguida, recupera o campo `bar' do valor de `foo'. Cada segmento de caminho pode descer em um documento incorporado ou um campo de hash .

  • Recuperação de elementos de array ('foo.N') - recupera o enésimo elemento de array do campo `foo', que deve ser uma array. N deve ser um número inteiro não negativo.

  • Array traversal ('foo.bar') - se `foo' for um campo de array e os elementos de `foo' forem hashes ou documentos incorporados, isso retornará uma array de valores do campo `bar' em cada um dos hashes na array `foo'.

Esse método pode retornar um valor de campo individual em algum documento ou uma array de valores de vários documentos. A array pode ser retornada porque um valor de campo no caminho especificado é uma array de valores primitivos (por exemplo inteiros) ou porque um valor de campo no caminho especificado é uma array de documentos (por exemplo, uma associação incorporada de um para muitos), caso em que o valor da folha pode ser um escalar para cada documento individual. Se o valor da folha for uma array e uma associação de um para muitos tiver sido atravessada, o valor de retorno será uma array de arrays. Observe que um valor de campo individual também pode ser uma array e esse caso é indistinguível e se comporta de forma idêntica à associação traversal para fins de, por exemplo, recuperação subsequente de elementos de array .

Parâmetros:

  • documento (Documento | Hash)

    O documento do qual extrair.

  • chave (string)

    O caminho da chave para extrair.

Retorna:

  • (Objeto | Matriz)

    Valor ou valores do 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
# Arquivo 'lib/mongoid/matcher.rb', linha 46

module_function def extract_attribute(documento, chave)
  se documento.respond_to?(:as_attributes, true)
    # Se um documento tiver campos de hash, as_attributes manterá esses campos
    # como instâncias de Hash que não oferecem acesso indiferente.
    # Converta para BSON::Document para obter acesso indiferente em campos de hash.
    documento = documento.enviar(:as_attributes)
  end

  Current = [documento]

  chave.to_s.dividir('.').cada fazer |Campo|
    Novo = []
    Current.cada fazer |doc|
      caso doc
      quando Hash
        actual_key = find_exact_key(doc, Campo)
        se !actual_key.nada?
          Novo << doc[actual_key]
        end
      quando Array
        se (index = Campo.to_i).to_s == Campo
          se doc.Tamanho > index
            Novo << doc[index]
          end
        end
        doc.cada fazer |subdoc|
          se Hash === subdoc
            actual_key = find_exact_key(subdoc, Campo)
            se !actual_key.nada?
              Novo << subdoc[actual_key]
            end
          end
        end
      end
    end
    Current = Novo
    intervalo se Current.vazio?
  end

  Current
end

.find_exact_key(hash, chave) ➤ string | Símbolo | nada

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Pesquisa independente de string ou chave de símbolo, retornando a chave exata.

Parâmetros:

  • hash (Hash)

    O hash de entrada.

  • chave (string | Símbolo)

    A chave para realizar pesquisas indiferentes.

Retorna:

  • (string | Símbolo | nil)

    A chave exata (com o tipo correto) que existe no hash, ou nula se a chave não existir.



94
95
96
97
98
99
100
# Arquivo 'lib/mongoid/matcher.rb', linha 94

module_function def find_exact_key(hash, chave)
  key_s = chave.to_s
  Método key_s se hash.chave?(key_s)

  key_sym = chave.to_sym
  hash.chave?(key_sym) ? key_sym : nada
end