Docs Menu
Docs Home
/
MongoDB Atlas
/ / / /

범위

이 페이지의 내용

  • 정의
  • 구문
  • 옵션
  • 예시
  • 번호 예시
  • 날짜 예시
  • ObjectId 예시
  • 문자열 예시
range

range 연산자는 숫자, 날짜 및 GeoJSON 포인트 값을 쿼리하고 점수를 매기는 기능을 지원합니다. 해당 연산자를 사용하여 지정된 숫자, 날짜, objectId 또는 문자(영어 알파벳) 범위 내에 있는 결과를 찾을 수 있습니다.

range 는 다음 데이터 유형에 대한 쿼리를 지원합니다.

  • 숫자( int32, int64double포함)

  • 날짜

  • 문자열, Atlas Search 토큰 유형으로 인덱싱됨

  • objectId

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 or gte
BSON 날짜, 숫자, 문자열 또는 objectId

주어진 값보다 큰 값(>)을 찾거나, 주어진 값보다 크거나 같은 값(>=)을 찾습니다.

  • 숫자 필드의 경우 값은 int32, int64 또는 double 데이터 유형일 수 있습니다.

  • 날짜 필드의 경우 값은 ISODate 형식의 날짜여야 합니다.

  • 문자열 필드의 경우, 값은 Atlas Search token 유형으로 인덱싱되어야 합니다.

  • ObjectId 필드의 경우 값은 objectId 데이터 유형으로 인덱싱되어야 하거나 동적 매핑true로 설정되어야 합니다.

no
lt or lte
BSON 날짜, 숫자, 문자열 또는 objectId

주어진 값보다 작은 값(<)을 찾거나, 주어진 값보다 작거나 같은 값(<=)을 찾습니다.

  • 숫자 필드의 경우 값은 int32, int64 또는 double 데이터 유형일 수 있습니다.

  • 날짜 필드의 경우 값은 ISODate 형식의 날짜여야 합니다.

  • 문자열 필드의 경우, 값은 Atlas Search token 유형으로 인덱싱되어야 합니다.

  • ObjectId 필드의 경우 값은 objectId 데이터 유형으로 인덱싱되어야 하거나 동적 매핑true로 설정되어야 합니다.

no
path
문자열 또는 문자열 배열
인덱싱된 필드 또는 검색할 필드입니다. 경로 구성을 참조하세요.
score
객체

일치하는 검색 결과에 할당된 점수를 수정합니다. 다음 옵션을 사용하여 기본 점수를 수정할 수 있습니다.

  • boost결과 점수에 주어진 숫자를 곱합니다.

  • constant결과 점수를 주어진 숫자로 바꿉니다.

  • function결과 점수를 주어진 표현식으로 대체합니다.

배열에서 값을 쿼리할 때, Atlas Search는 배열 내 쿼리와 일치하는 값의 개수에 따라 일치하는 결과의 점수를 수정하지 않습니다. 점수는 배열 내부의 일치 항목 수에 관계없이 단일 일치 항목과 동일합니다.

쿼리에서 score 사용에 대한 자세한 내용은 결과에서 문서 채점하기를 참조하십시오.

no

다음 예시에서는 샘플 데이터의 컬렉션을 사용합니다. 클러스터에 샘플 데이터를 로드한 경우, 아래 예시의 인덱스 정의를 사용하여 인덱스를 생성하고 클러스터에서 예시 쿼리를 실행할 수 있습니다.

샘플 데이터 집합을 이미 로드한 경우, Atlas Search 시작하기 자습서에 따라 인덱스 정의를 만들고 Atlas Search 쿼리를 실행하세요.

다음 예시에서는 샘플 데이터의 숫자 필드에 인덱스를 사용하고 인덱싱된 필드에 대해 range 쿼리를 실행합니다.

이 예에서는 정적 또는 동적 매핑을 사용하여 sample_mflix.movies collection의 runtime 필드에 대한 인덱스를 생성할 수 있습니다. 이 쿼리는 gtelte 필드를 사용하여 검색할 숫자 범위를 정의합니다.

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 단계를 포함하고, titleruntime를 제외한 모든 필드를 제외하기 위해 $project 단계를 포함합니다.

1db.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 단계가 포함되어 있습니다.

  • titleruntime을 제외한 모든 필드를 제외합니다.

  • 다음과 같은 이름의 필드를 추가합니다. score

1db.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 컬렉션에서 숫자 값 배열이 있는 필드를 포함하여 동적으로 인덱싱할 수 있는 모든 필드를 동적으로 인덱싱합니다. 샘플 쿼리는 gtelte 필드를 사용하여 숫자 값 배열에서 지정된 값 사이의 모든 값을 Atlas Search에 사용합니다.

default 이라는 이름의 다음 인덱스 정의는 숫자 값의 배열인 accounts 필드를 포함하여 모든 필드를 동적으로 인덱싱합니다.

{
"mappings": {
"dynamic": true
}
}

다음 쿼리는 250000 ~ 300000 사이의 고객 계정을 검색합니다. 여기에는 출력을 5 결과로 제한하는 $limit 단계와 accountsname 를 제외한 모든 필드를 제외하는 $project 단계가 포함됩니다.

1db.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 단계와 titlereleased를 제외한 모든 필드를 제외하는 $project 단계가 포함되어 있습니다.

1db.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]

다음 예시에서는 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 값 범위를 쿼리합니다.

1db.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"
}
}
}
}

다음 쿼리는 citycountry 사이의 문자가 포함된 영화 제목을 검색합니다. 여기에는 출력을 5 결과로 제한하는 $limit 단계와 title을 제외한 모든 필드를 제외하는 $project 단계가 포함되어 있습니다.

1db.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' }
]

돌아가기

쿼리 문자열