범위
정의
구문
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
는 다음 용어를 사용하여 쿼리를 구성합니다:
필드 | 유형 | 설명 | 필요성 |
---|---|---|---|
| BSON 날짜, 숫자, 문자열 또는 objectId | no | |
| BSON 날짜, 숫자, 문자열 또는 objectId | no | |
| 문자열 또는 문자열 배열 | 검색 할 인덱싱된 필드 입니다. | 네 |
| 객체 | 일치하는 검색 결과에 할당된 점수를 수정합니다. 다음 옵션을 사용하여 기본 점수를 수정할 수 있습니다.
배열 값을 쿼리할 때 Atlas Search 배열 에서 쿼리 와 일치하는 값의 수에 관계없이 동일한 점수를 할당합니다. 쿼리에서 | no |
예시
다음 예시에서는 샘플 데이터의 컬렉션을 사용합니다. 클러스터에 샘플 데이터를 로드한 경우, 아래 예시의 인덱스 정의를 사용하여 인덱스를 생성하고 클러스터에서 예시 쿼리를 실행할 수 있습니다.
번호 예시
다음 예시에서는 샘플 데이터의 숫자 필드에 인덱스를 사용하고 인덱싱된 필드에 대해 range
쿼리를 실행합니다.
이 예에서는 정적 또는 동적 매핑을 사용하여 sample_mflix.movies
collection의 runtime
필드에 대한 인덱스를 생성할 수 있습니다. 이 쿼리는 gte
및 lte
필드를 사용하여 검색할 숫자 범위를 정의합니다.
샘플 인덱스
default
라고 명명된 다음 인덱스 정의는 movies
컬렉션의 모든 필드를 인덱싱합니다.
1 { 2 "mappings": { 3 "dynamic": true 4 } 5 }
default
(이)라고 명명된 다음 인덱스 정의는 movies
컬렉션에서만 runtime
필드의 인덱스를 생성합니다.
1 { 2 "mappings": { 3 "dynamic": false, 4 "fields": { 5 "runtime": { 6 "type": "number" 7 } 8 } 9 } 10 }
샘플 쿼리
다음 쿼리는 런타임이 2
보다 크거나 같고 3
보다 작거나 같은 영화를 검색합니다. 쿼리는 출력 결과를 5
개로 제한하기 위해 $limit
단계를 포함하고, title
과 runtime
를 제외한 모든 필드를 제외하기 위해 $project
단계를 포함합니다.
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "range": { 5 "path": "runtime", 6 "gte": 2, 7 "lte": 3 8 } 9 } 10 }, 11 { 12 "$limit": 5 13 }, 14 { 15 "$project": { 16 "_id": 0, 17 "title": 1, 18 "runtime": 1 19 } 20 } 21 ])
{ "runtime" : 3, "title" : "Dots" } { "runtime" : 3, "title" : "Sisyphus" } { "runtime" : 3, "title" : "The Fly" } { "runtime" : 2, "title" : "Andrè and Wally B." } { "runtime" : 2, "title" : "Luxo Jr." }
이 예에서는 정적 또는 동적 매핑을 사용하여 sample_mflix.movies
컬렉션의 runtime
필드를 인덱싱할 수 있습니다. 쿼리는 lte
필드를 사용하여 지정된 값보다 작거나 같은 모든 값을 검색합니다.
샘플 인덱스
default
이라는 이름의 다음 인덱스 정의는 movies
컬렉션의 runtime
필드를 인덱싱합니다.
1 { 2 "mappings": { 3 "dynamic": true 4 } 5 }
1 { 2 "mappings": { 3 "dynamic": false, 4 "fields": { 5 "runtime": { 6 "type": "number" 7 } 8 } 9 } 10 }
샘플 쿼리
다음 쿼리는 런타임이 2
이하인 모든 영화를 검색합니다. 여기에는 출력을 5
결과로 제한하는 $limit
단계와 $project
단계가 포함되어 있습니다.
title
및runtime
을 제외한 모든 필드를 제외합니다.다음과 같은 이름의 필드를 추가합니다.
score
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "range": { 5 "path": "runtime", 6 "lte": 2 7 } 8 } 9 }, 10 { 11 "$limit": 5 12 }, 13 { 14 "$project": { 15 "_id": 0, 16 "title": 1, 17 "runtime": 1, 18 score: { $meta: "searchScore" } 19 } 20 } 21 ])
{ "runtime" : 1, "title" : "Blacksmith Scene", "score" : 1 } { "runtime" : 2, "title" : "Andrè and Wally B.", "score" : 1 } { "runtime" : 2, "title" : "Luxo Jr.", "score" : 1 } { "runtime" : 1, "title" : "The Kiss", "score" : 1 } { "runtime" : 1, "title" : "Dickson Experimental Sound Film", "score" : 1 }
다음 예제에서는 sample_analytics.customers
컬렉션에서 숫자 값 배열이 있는 필드를 포함하여 동적으로 인덱싱할 수 있는 모든 필드를 동적으로 인덱싱합니다. 샘플 쿼리는 gte
및 lte
필드를 사용하여 숫자 값 배열에서 지정된 값 사이의 모든 값을 Atlas Search에 사용합니다.
샘플 인덱스
default
이라는 이름의 다음 인덱스 정의는 숫자 값의 배열인 accounts
필드를 포함하여 모든 필드를 동적으로 인덱싱합니다.
{ "mappings": { "dynamic": true } }
샘플 쿼리
다음 쿼리는 250000
~ 300000
사이의 고객 계정을 검색합니다. 여기에는 출력을 5
결과로 제한하는 $limit
단계와 accounts
및 name
를 제외한 모든 필드를 제외하는 $project
단계가 포함됩니다.
1 db.customers.aggregate([ 2 { 3 "$search": { 4 "range": { 5 "path": "accounts", 6 "gt": 250000, 7 "lt": 400000 8 } 9 } 10 }, 11 { 12 "$limit": 5 13 }, 14 { 15 "$project": { 16 "_id": 0, 17 "accounts": 1, 18 "name": 1 19 } 20 } 21 ])
1 [ 2 { 3 name: 'Elizabeth Ray', 4 accounts: [ 371138, 324287, 276528, 332179, 422649, 387979 ] 5 }, 6 { 7 name: 'Katherine David', 8 accounts: [ 462501, 228290, 968786, 515844, 377292 ] 9 }, 10 { 11 name: 'Brad Cardenas', 12 accounts: [ 721914, 817222, 973067, 260799, 87389 ] 13 }, 14 { 15 name: 'Gary Nichols', 16 accounts: [ 385397, 337979, 325377, 440243, 586395, 86702 ] 17 }, 18 { name: 'Jennifer Lawrence', accounts: [ 344885, 839927, 853542 ] } 19 ]
날짜 예시
다음 예시에서는 range
연산자를 사용하여 sample_mflix.movies
컬렉션의 날짜 필드를 쿼리합니다. 이 예시에서는 정적 또는 동적 매핑을 사용하여 컬렉션에서 released
이라는 date
유형 필드를 인덱싱할 수 있습니다.
샘플 인덱스
default
이라는 이름의 다음 인덱스 정의는 date
유형인 released
필드를 포함하여 movies
collection의 모든 동적으로 인덱싱할 수 있는 필드를 인덱싱합니다.
{ "mappings": { "dynamic": true } }
default
이라는 이름의 다음 인덱스 정의는 movies
컬렉션의 released
필드를 인덱싱합니다.
{ "mappings": { "dynamic": false, "fields": { "released": { "type": "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 [ 2 { 3 title: 'Too Much Johnson', 4 released: ISODate('2014-08-30T00:00:00.000Z') 5 }, 6 { 7 title: 'Stolen Desire', 8 released: ISODate('2012-07-01T00:00:00.000Z') 9 }, 10 { 11 title: 'The Monkey King', 12 released: ISODate('2012-01-12T00:00:00.000Z') 13 }, 14 { title: 'The Land', released: ISODate('2012-08-04T00:00:00.000Z') }, 15 { 16 title: 'My Childhood', 17 released: ISODate('2013-07-31T00:00:00.000Z') 18 } 19 ]
ObjectId 예시
다음 예시에서는 range
연산자를 사용하여 sample_mflix.movies
컬렉션의 objectId
필드를 쿼리합니다. 이 예시에서는 정적 또는 동적 매핑을 사용하여 컬렉션에서 _id
라는 objectId
유형 필드를 인덱싱할 수 있습니다.
샘플 인덱스
default
라고 명명된 다음 인덱스 정의는 movies
컬렉션의 모든 필드를 인덱싱합니다.
default
이라는 이름의 다음 인덱스 정의는 objectId
유형인 _id
필드를 포함하여 movies
collection의 모든 동적으로 인덱싱할 수 있는 필드를 인덱싱합니다.
{ "mappings": { "dynamic": true } }
default
이라는 이름의 다음 인덱스 정의는 movies
컬렉션의 _id
필드를 인덱싱합니다.
{ "mappings": { "dynamic": false, "fields": { "_id": { "type": "objectId" } } } }
샘플 쿼리
다음 예시는 range
연산자를 사용하여 sample_mflix.movies
컬렉션의 _id
필드에서 objectId
값 범위를 쿼리합니다.
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "range": { 5 "path": "_id", 6 "gte": ObjectId("573a1396f29313caabce4a9a"), 7 "lte": ObjectId('573a1396f29313caabce4ae7') 8 } 9 } 10 }, 11 { 12 "$project": { 13 "_id": 1, 14 "title": 1, 15 "released": 1 16 } 17 } 18 ])
1 [ 2 { 3 _id: ObjectId('573a1396f29313caabce4a9a'), 4 title: 'The Godfather', 5 released: ISODate('1972-03-24T00:00:00.000Z') 6 }, 7 { 8 _id: ObjectId('573a1396f29313caabce4a9b'), 9 title: 'Get to Know Your Rabbit', 10 released: ISODate('1972-06-01T00:00:00.000Z') 11 }, 12 { 13 _id: ObjectId('573a1396f29313caabce4aad'), 14 title: 'The Tall Blond Man with One Black Shoe', 15 released: ISODate('1973-08-30T00:00:00.000Z') 16 }, 17 { 18 _id: ObjectId('573a1396f29313caabce4abe'), 19 title: 'The Great Northfield Minnesota Raid', 20 released: ISODate('1972-05-12T00:00:00.000Z') 21 }, 22 { 23 _id: ObjectId('573a1396f29313caabce4ac4'), 24 title: 'The Heartbreak Kid', 25 released: ISODate('1973-02-01T00:00:00.000Z') 26 }, 27 { 28 _id: ObjectId('573a1396f29313caabce4ac7'), 29 title: 'Gumshoe', 30 released: ISODate('1971-12-01T00:00:00.000Z') 31 }, 32 { 33 _id: ObjectId('573a1396f29313caabce4ad9'), 34 title: 'Heat', 35 released: ISODate('1972-10-06T00:00:00.000Z') 36 }, 37 { 38 _id: ObjectId('573a1396f29313caabce4ae7'), 39 title: 'Horror Express', 40 released: ISODate('1973-12-01T00:00:00.000Z') 41 } 42 ]
문자열 예시
다음 예시에서는 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' } ]
메타데이터 예시
다음 쿼리 런타임이 2
이상이고 이하인 영화를 3
검색합니다. 이 쿼리 단계를 사용하여 $searchMeta
다음 버킷(연도)에서 검색 기준과 일치하는 모든 영화를 조회 .
1990, 이 버킷에 대한 포괄적인 하한값
2000, 1990 버킷의 상한 제외 및 이 버킷의 하한 포함
2010, 2000 버킷의 상한 제외 및 이 버킷의 하한 포함
2020, 2010 버킷의 배타적 상한선
쿼리 sample_mflix.movies
네임스페이스 의 모든 필드를 동적으로 인덱싱하는 default
이라는 인덱스 사용합니다.
db.movies.aggregate([ { "$searchMeta": { "facet": { "operator": { "range": { "path": "runtime", "gte": 2, "lte": 3 } }, "facets": { "yearFacet": { "type": "number", "path": "year", "boundaries": [1990, 2000, 2010, 2020 ] } } } } } ])
[ { count: { lowerBound: Long('15') }, facet: { yearFacet: { buckets: [ { _id: 1990, count: Long('2') }, { _id: 2000, count: Long('3') }, { _id: 2010, count: Long('5') } ] } } } ]