AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.

range (MongoDB Search 연산자)

range

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

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 "doesNotAffect": "<facet-to-exclude>" | [<array-of-facets>]
10 }
11 }
12}

range 는 다음 용어를 사용하여 쿼리를 구성합니다:

필드
유형
설명
필요성

gt or gte

BSON 날짜, 숫자, 문자열 또는 objectId

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

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

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

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

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

no

lt or lte

BSON 날짜, 숫자, 문자열 또는 objectId

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

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

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

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

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

no

path

문자열 또는 문자열 배열

인덱싱된 필드 또는 검색할 필드.

네

score

객체

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

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

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

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

배열 값을 쿼리할 때 MongoDB Search는 배열 에서 쿼리 와 일치하는 값이 더 많을수록 더 높은 점수를 할당합니다.

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

no

doesNotAffect

문자열 또는 문자열 배열

이 쿼리 기반으로 카운트 재계산에서 제외할 패싯 또는 패싯 목록입니다. 값은 $search.facets 또는 $searchMeta.facets에 정의된 패싯 의 이름 중 하나 이상이어야 합니다. 연산자 이 쿼리 일치하도록 문서를 필터링하는 데 지정된 패싯을 사용하지만 해당 패싯의 개수는 다시 계산하지 않습니다. 자세한 내용은 다중 선택 패싯을 참조하세요.

no

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

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

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

다음 인덱스 정의 중 하나를 사용합니다.

다음 쿼리는 런타임이 2보다 크거나 같고 3보다 작거나 같은 영화를 검색합니다. 쿼리는 출력 결과를 5개로 제한하기 위해 $limit 단계를 포함하고, title과 runtime를 제외한 모든 필드를 제외하기 위해 $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])

다음 예시에서는 range 연산자를 사용하여 sample_mflix.movies 컬렉션의 날짜 필드를 쿼리합니다. 이 예시에서는 정적 또는 동적 매핑을 사용하여 컬렉션에서 released이라는 date 유형 필드를 인덱싱할 수 있습니다.

다음 인덱스 정의 중 하나를 사용합니다.

다음 쿼리는 2010년 1월 1일과 2015년 1월 1일 사이에 개봉한 영화를 검색합니다. 여기에는 출력 결과를 5개로 제한하는 $limit 단계와 title 및 released를 제외한 모든 필드를 제외하는 $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])

다음 예시에서는 range 연산자를 사용하여 sample_mflix.movies 컬렉션의 objectId 필드를 쿼리합니다. 이 예시에서는 정적 또는 동적 매핑을 사용하여 컬렉션에서 _id라는 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])

다음 예시 range 연산자 사용하여 sample_mflix.movies 컬렉션 의 문자열 필드 쿼리 . 이 예시 에서는 정적 매핑을 사용하여 컬렉션 의 title 필드 MongoDB Search token 유형으로 인덱스 해야 합니다.

default 이라는 이름의 다음 인덱스 정의는 movies 컬렉션 의 title 필드 MongoDB Search token 유형으로 인덱싱합니다.

{
"mappings": {
"dynamic": false,
"fields": {
"title": {
"type": "token",
"normalizer": "lowercase"
}
}
}
}

다음 쿼리는 city 와 country 사이의 문자가 포함된 영화 제목을 검색합니다. 여기에는 출력을 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])

다음 쿼리는 sample_training.companies 컬렉션의 funding_rounds.raised_amount 필드에서 500000 이상이고 1000000 이하인 값을 검색합니다. returnStoredSource: true 와 returnScope를 사용하여 funding_rounds 객체 배열 내의 필드를 조회하고 반환하며, 이 필드는 mongot에 저장됩니다. 이 쿼리는 저장된 소스에 대한 상대 경로 사용 예시의 샘플 인덱스를 사용합니다.

➤ Search Playground에서 사용해 보세요. MongoDB 검색 플레이그라운드의 데이터가 다음 예시에서 사용된 샘플 컬렉션보다 작기 때문에 MongoDB 검색 플레이그라운드의 결과는 다를 수 있습니다.

1db.companies.aggregate([
2 {
3 "$search": {
4 "range": {
5 "path": "funding_rounds.raised_amount",
6 "gte": 500000,
7 "lte": 1000000
8 },
9 "returnStoredSource": true,
10 "returnScope": {
11 "path": "funding_rounds"
12 }
13 }
14 },
15 {
16 "$limit": 5
17 }
18])

다음 쿼리는 런타임이 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 ]
}
}
}
}
}
])