범위
정의
구문
range
의 구문은 다음과 같습니다:
1 { 2 "$search": { 3 "index": <index name>, // optional, defaults to "default" 4 "range": { 5 "path": "<field-to-search>", 6 "gt | gte": <value-to-search>, 7 "lt | lte": <value-to-search>, 8 "score": <score-options> 9 } 10 } 11 }
옵션
range
는 다음 용어를 사용하여 쿼리를 구성합니다:
필드 | 유형 | 설명 | 필요성 |
---|---|---|---|
gt 또는 gte | BSON 날짜 또는 숫자 | 주어진 값보다 큰 값(
| 아니 |
lt 또는 lte | BSON 날짜 또는 숫자 | 주어진 값보다 작은 값(
| 아니 |
path | 문자열 또는 문자열 배열 | 인덱싱된 필드 또는 검색할 필드입니다. 경로 구성을 참조하세요. | 네 |
score | 객체 | 일치하는 검색 결과에 할당된 점수를 수정합니다. 다음 옵션을 사용하여 기본 점수를 수정할 수 있습니다.
쿼리에서 참고배열에서 값을 쿼리할 때, Atlas Search는 배열 내 쿼리와 일치하는 값의 개수에 따라 일치하는 결과의 점수를 수정하지 않습니다. 점수는 배열 내부의 일치 항목 수에 관계없이 단일 일치 항목과 동일합니다. | 아니 |
예제
다음 예제에서는 샘플 데이터의 컬렉션을 사용합니다. 클러스터에 샘플 데이터를 로드한 경우, 아래 예제의 인덱스 정의를 사용하여 인덱스를 생성하고 클러스터에서 예제 쿼리를 실행할 수 있습니다.
팁
샘플 데이터 집합을 이미 로드한 경우, Atlas Search 시작하기 자습서에 따라 인덱스 정의를 만들고 Atlas Search 쿼리를 실행하세요.
번호 예제
다음 예제에서는 샘플 데이터의 숫자 필드에 인덱스를 사용하고 인덱싱된 필드에 대해 range
쿼리를 실행합니다.
날짜 예제
다음 예제에서는 range
연산자를 사용하여 sample_mflix.movies
컬렉션의 날짜 필드를 쿼리합니다. 이 예제에서는 정적 또는 동적 매핑을 사용하여 컬렉션에서 released
이라는 date
유형 필드를 인덱싱할 수 있습니다.
샘플 인덱스
샘플 쿼리
다음 쿼리는 2010년 1월 1일과 2015년 1월 1일 사이에 개봉한 영화를 검색합니다. 여기에는 출력 결과를 5개로 제한하는 $limit
단계와 title
및 released
를 제외한 모든 필드를 제외하는 $project
단계가 포함되어 있습니다.
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "range": { 5 "path": "released", 6 "gt": ISODate("2010-01-01T00:00:00.000Z"), 7 "lt": ISODate("2015-01-01T00:00:00.000Z") 8 } 9 } 10 }, 11 { 12 "$limit": 5 13 }, 14 { 15 "$project": { 16 "_id": 0, 17 "title": 1, 18 "released": 1 19 } 20 } 21 ])
위의 쿼리는 다음과 같은 검색 결과를 반환합니다.
1 { "title" : "The Fall of the House of Usher", "released" : ISODate("2011-09-20T00:00:00Z") } 2 { "title" : "The Blood of a Poet", "released" : ISODate("2010-05-20T00:00:00Z") } 3 { "title" : "Too Much Johnson", "released" : ISODate("2014-08-30T00:00:00Z") } 4 { "title" : "Stolen Desire", "released" : ISODate("2012-07-01T00:00:00Z") } 5 { "title" : "The Monkey King", "released" : ISODate("2012-01-12T00:00:00Z") }
문자열 예제
다음 예제에서는 range
연산자를 사용하여 sample_mflix.movies
컬렉션의 문자열 필드를 쿼리합니다. 이 예에서는 정적 매핑을 사용하여 컬렉션의 title
라는 필드를 Atlas Search token
유형으로 인덱싱해야 합니다.
샘플 인덱스
default
이라는 다음 인덱스 정의는 movies
컬렉션의 title
필드를 Atlas Search token
유형으로 인덱싱합니다.
{ "mappings": { "dynamic": false, "fields": { "title": { "type": "token", "normalizer": "lowercase" } } } }
샘플 쿼리
다음 쿼리는 city
와 country
사이의 문자가 포함된 영화 제목을 검색합니다. 여기에는 출력을 5 결과로 제한하는 $limit
단계와 title
을 제외한 모든 필드를 제외하는 $project
단계가 포함되어 있습니다.
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "range": { 5 "path": "title", 6 "gt": "city", 7 "lt": "country" 8 } 9 } 10 }, 11 { 12 "$limit": 5 13 }, 14 { 15 "$project": { 16 "_id": 0, 17 "title": 1 18 } 19 } 20 ])
[ { title: 'Civilization' }, { title: 'Clash of the Wolves' }, { title: 'City Lights' }, { title: 'Comradeship' }, { title: 'Come and Get It' } ]