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 current document.
  • Hash/travessia do campo de documento incorporado (foo.bar) - recupera o campo foo no document 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 elemento de array enésimo do campo foo, que deve ser uma array. N deve ser um número inteiro não negativo.
  • Traversal de array (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 em foo array.

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

    O documento do qual extrair.

  • chave (string)

    O caminho da chave para extrair.

Retorna:

  • (Objeto | Matriz)

    Valor ou valores do campo.



44
45
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
# Arquivo 'lib/mongoid/matcher.rb', linha 44

module_function def extract_attribute(documento, chave)
  # O sistema de correspondência acabará enviando valores atômicos para isso também,
  # ao tentar combinar tipos mais complexos. Se algo diferente de um
  # Documento ou um Hash for fornecido, causaremos um curto-circuito na lógica e apenas
  # retorna uma array vazia.
  Método [] a menos que documento.is_a?(Hash) || documento.is_a?(Documento)

  # Otimização de desempenho; se a chave não incluir um '.' personagem,
  # deve fazer referência a um atributo imediato do documento.
  a menos que chave.incluir?('.')
    hash = documento.respond_to?(:attributes) ? documento.attributes : documento
    chave = find_exact_key(hash, chave)
    Método chave ? [ hash[chave] ] : []
  end

  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)
        Novo << doc[actual_key] a menos que actual_key.nada?
      quando Array
        se ((index = Campo.to_i).to_s == Campo) && (doc.Tamanho > index)
          Novo << doc[index]
        end
        doc.cada fazer |subdoc|
          se subdoc.is_a?(Hash)
            actual_key = find_exact_key(subdoc, Campo)
            Novo << subdoc[actual_key] a menos que actual_key.nada?
          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.



100
101
102
103
104
105
106
# Arquivo 'lib/mongoid/matcher.rb', linha 100

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