문서 메뉴
문서 홈
/
MongoDB 아틀라스
/ / / /

범위

이 페이지의 내용

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

range 연산자는 숫자, 날짜 및 GeoJSON 포인트 값을 쿼리하고 점수를 매기는 기능을 지원합니다. 이 연산자를 사용하여 검색을 수행할 수 있습니다.

  • BSON int32, int64double 데이터 유형의 숫자 필드.

  • ISODate 형식인 BSON date 유형의 날짜 필드.

  • Atlas Search 토큰 유형으로 인덱싱된 BSON string 데이터 유형의 문자열 필드입니다.

range 연산자를 사용하여 지정된 숫자, 날짜 또는 문자(영어 알파벳) 범위 내에 있는 결과를 찾을 수 있습니다.

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 날짜 또는 숫자

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

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

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

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

아니
lt 또는 lte
BSON 날짜 또는 숫자

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

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

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

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

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

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

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

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

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

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

참고

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

아니

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

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

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

다음 예제에서는 range 연산자를 사용하여 sample_mflix.movies 컬렉션의 날짜 필드를 쿼리합니다. 이 예제에서는 정적 또는 동적 매핑을 사용하여 컬렉션에서 released이라는 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{ "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"
}
}
}
}

다음 쿼리는 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' }
]
← 쿼리 문자열