모듈: Mongoid::Matcher Private

다음에 정의됨:
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/ 표현식.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
more...

개요

이 모듈은 비공개 API의 일부입니다. 이 모듈은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

MQL 쿼리 표현식과 문서의 인메모리 일치를 수행하는 데 도움이 되는 메서드가 포함된 유틸리티 모듈입니다.

네임스페이스 아래에 정의됨

모듈: 모두, And, Bits, BitsAllClear, BitsAllSet, BitsAnyClear, BitsAnySet, ElemMatch, ElemMatchExpression, Eq, EqImpl, EqImplWithRegexp, Exists, Expression, ExpressionOperator, FieldExpression, FieldOperator , FieldExpression , FieldOperator, Gt , Gt , Nor, Not, Or, Regex, Size, Type

클래스 메서드 요약 접기

클래스 메서드 세부 정보

.extract_attribute(문서, 키) ⇒ 객체 | 배열

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

문서의 지정된 키에서 필드 값을 추출합니다.

문서 는 해시 또는 모델 인스턴스 일 수 있습니다.

키는 유효한 MongoDB 점 표기법 키입니다. 지원되는 사용 사례는 다음과 같습니다.

  • 단순 필드 순회('foo') - 현재 문서 에서 'foo' 필드 를 조회합니다.

  • 해시/ 내장된 문서 필드 순회('foo.bar') - 현재 문서 에서 'foo' 필드 를 검색한 다음 'foo' 값에서 'bar' 필드 를 검색합니다. 각 경로 세그먼트는 내장된 문서 또는 해시 필드 로 구성될 수 있습니다.

  • 배열 요소 조회('foo.N') - 배열이어야 하는 'foo' 필드에서 N번째 배열 요소를 조회합니다. N은 음수가 아닌 정수여야 합니다.

  • 배열 순회('foo.bar') - `foo`가 배열 필드 이고 `foo`의 요소가 해시 또는 내장된 문서인 경우 `foo` 배열 의 각 해시에 있는 `bar` 필드 값의 배열 을 반환합니다.

이 메서드는 일부 문서 의 개별 필드 값 또는 여러 문서의 값 배열 을 반환할 수 있습니다. 지정된 경로의 필드 값이 기본 값의 배열 이기 때문에 배열 이 반환될 수 있습니다(예: 정수) 또는 지정된 경로의 필드 값이 문서 배열 (예: 일대다 포함된 연관 관계)이기 때문에 리프 값은 각 개별 문서 의 스칼라일 수 있습니다. 리프 값이 배열 이고 일대다 연관 관계가 탐색된 경우, 반환 값은 배열 의 배열이 됩니다. 개별 필드 값도 배열 이 될 수 있으며, 이 예시 는 후속 배열 요소 검색 등을 위해 연관 관계 순회와 구분할 수 없으며 이와 동일하게 동작합니다.

매개변수:

  • 문서 (문서 | 해시 | 문자열)

    추출할 문서 입니다.

  • (string)

    추출할 키 경로입니다.

반환합니다:

  • (객체 | 배열)

    필드 값.

[소스 보기]

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
# 파일 'lib/mongoid/matcher.rb', 46줄

module_function def extract_attribute(문서, )
  # 매처 시스템은 여기에도 원자 값을 전송합니다.
  # 더 복잡한 유형을 일치시키려고 할 때. 이외의 경우
  # 문서 또는 해시가 제공되면 로직을 단락시키고
  # 빈 배열 반환합니다.
  반환 [] 하지 않는 한 문서.is_a?(해시) || 문서.is_a?(문서)

  # 성능 최적화. 키에 '.'가 포함되지 않은 경우 문자,
  # 문서 의 직계 속성을 참조해야 합니다.
  하지 않는 한 .포함?('.')
    해시 = 문서.response_to?(:attributes) ? 문서.속성 : 문서
     = find_exact_key(해시, )
    반환  ? [ 해시[] ] : []
  end

  만약 문서.response_to?(:as_attributes, true)
    # 문서 에 해시 필드가 있는 경우 as_attributes는 해당 필드를 유지합니다.
    # 무관심한 액세스 를 제공하지 않는 해시 인스턴스로 사용됩니다.
    # BSON::Document로 변환하여 해시 필드에 무관심하게 액세스 합니다.
    문서 = 문서.send(:as_attributes)
  end

  Current = [문서]

  .to_s.split('.'). do |필드|
    신규 = []
    Current. do |doc|
      case doc
      when 해시
        actual_key = find_exact_key(doc, 필드)
        만약 !actual_key.nil?
          신규 << doc[actual_key]
        end
      when 배열
        만약 (index = 필드.to_i).to_s == 필드
          만약 doc.분량 > index
            신규 << doc[index]
          end
        end
        doc. do |subdoc|
          만약 해시 === subdoc
            actual_key = find_exact_key(subdoc, 필드)
            만약 !actual_key.nil?
              신규 << subdoc[actual_key]
            end
          end
        end
      end
    end
    Current = 신규
    휴식 만약 Current.비어 있나요?
  end

  Current
end

.find_exact_key(해시, 키) ⇒ string | 기호 | nil

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

무관한 string 또는 기호 키를 조회하여 정확한 키를 반환합니다.

매개변수:

  • 해시 (해시)

    입력 해시입니다.

  • (string | 기호)

    무관심 조회를 수행하는 데 사용할 키입니다.

반환합니다:

  • (string | 기호 | nil)

    해시에 존재하는 정확한 키(올바른 유형의 키)이거나, 키가 존재하지 않는 경우 nil입니다.

[소스 보기]

108
109
110
111
112
113
114
# 파일 'lib/mongoid/matcher.rb', 108줄

module_function def find_exact_key(해시, )
  key_s = .to_s
  반환 key_s 만약 해시.키?(key_s)

  key_sym = .to_sym
  해시.키?(key_sym) ? key_sym : nil
end