모듈: 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(문서, 키) ⇒ 객체 | 배열
비공개
문서의 지정된 키에서 필드 값을 추출합니다.
-
.find_exact_key(해시, 키) ⇒ string | 기호 | nil
비공개
무관한 string 또는 기호 키를 조회하여 정확한 키를 반환합니다.
클래스 메서드 세부 정보
.extract_attribute(문서, 키) ⇒ 객체 | 배열
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
문서의 지정된 키에서 필드 값을 추출합니다.
문서 는 해시 또는 모델 인스턴스 일 수 있습니다.
키는 유효한 MongoDB 점 표기법 키입니다. 지원되는 사용 사례는 다음과 같습니다.
-
단순 필드 순회('foo') - 현재 문서 에서 'foo' 필드 를 조회합니다.
-
해시/ 내장된 문서 필드 순회('foo.bar') - 현재 문서 에서 'foo' 필드 를 검색한 다음 'foo' 값에서 'bar' 필드 를 검색합니다. 각 경로 세그먼트는 내장된 문서 또는 해시 필드 로 구성될 수 있습니다.
-
배열 요소 조회('foo.N') - 배열이어야 하는 'foo' 필드에서 N번째 배열 요소를 조회합니다. N은 음수가 아닌 정수여야 합니다.
-
배열 순회('foo.bar') - `foo`가 배열 필드 이고 `foo`의 요소가 해시 또는 내장된 문서인 경우 `foo` 배열 의 각 해시에 있는 `bar` 필드 값의 배열 을 반환합니다.
이 메서드는 일부 문서 의 개별 필드 값 또는 여러 문서의 값 배열 을 반환할 수 있습니다. 지정된 경로의 필드 값이 기본 값의 배열 이기 때문에 배열 이 반환될 수 있습니다(예: 정수) 또는 지정된 경로의 필드 값이 문서 배열 (예: 일대다 포함된 연관 관계)이기 때문에 리프 값은 각 개별 문서 의 스칼라일 수 있습니다. 리프 값이 배열 이고 일대다 연관 관계가 탐색된 경우, 반환 값은 배열 의 배열이 됩니다. 개별 필드 값도 배열 이 될 수 있으며, 이 예시 는 후속 배열 요소 검색 등을 위해 연관 관계 순회와 구분할 수 없으며 이와 동일하게 동작합니다.
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 또는 기호 키를 조회하여 정확한 키를 반환합니다.
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 |