planCacheSetFilter
정의
planCacheSetFilter
컬렉션 에 인덱스 필터하다 를 설정합니다. 계획 캐시 쿼리 형태 에 대한 인덱스 필터하다 가 이미 있는 경우 이 명령은 이전 인덱스 필터하다 를 재정의합니다.
쿼리 설정
버전 8.0에 추가 되었습니다.
MongoDB 8.0 부터는 인덱스 필터 를 추가하는 대신 쿼리 설정을 사용합니다. 인덱스 필터는 MongoDB 8.0 부터 더 이상 사용되지 않습니다.
쿼리 설정에는 인덱스 필터보다 더 많은 기능이 있습니다. 또한 인덱스 필터는 영구적이지 않으며 모든 클러스터 노드에 대한 인덱스 필터를 쉽게 만들 수 없습니다. 쿼리 설정을 추가하고 예제를 탐색하려면 setQuerySettings
를 참조하세요.
쿼리 옵티마이저 쿼리 계획 중에 쿼리 설정을 추가 입력으로 사용하며, 이는 쿼리 를 실행 하기 위해 선택한 계획에 영향을 줍니다.
설정은 전체 클러스터 의 쿼리 형태 에 적용 됩니다. 클러스터 는 종료 후에도 설정을 유지합니다.
find
, distinct
및 aggregate
명령에 대한 쿼리 설정을 추가할 수 있습니다.
쿼리 설정을 제거 하려면 removeQuerySettings
를 사용합니다. 쿼리 설정을 가져오려면 집계 파이프라인 에서 $querySettings
단계를 사용합니다.
호환성
이 명령은 다음 환경에서 호스팅되는 배포에서 사용할 수 있습니다.
MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
중요
이 명령은 M0, M2 및 M5 클러스터에서 지원되지 않습니다. 자세한 내용은 지원되지 않는 명령을 참조하세요.
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
구문
명령은 다음과 같은 구문을 가집니다:
db.runCommand( { planCacheSetFilter: <collection>, query: <query>, sort: <sort>, projection: <projection>, collation: { <collation> }, indexes: [ <index1>, <index2>, ...], comment: <any> } )
인덱스 필터하다 에 대한 계획 캐시 쿼리 형태 는 다음과 같은 조합입니다.
query
sort
projection
collation
명령 필드
명령에는 다음과 같은 필드가 있습니다.
필드 | 유형 | 설명 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
| 문자열 | 인덱스 필터에 대한 collection의 이름입니다. | ||||||||||
| 문서 | 인덱스 필터에 대한 쿼리 조건자입니다. 필드 이름을 포함한 조건자 구조만 인덱스 필터에 사용됩니다. 쿼리 조건자의 필드 값이 사용되지 않습니다. 따라서 인덱스 필터의 쿼리 조건자는 필드 값만 다른 유사한 쿼리에서 사용됩니다. | ||||||||||
| 문서 | 선택 사항. 인덱스 필터의 정렬입니다. | ||||||||||
| 문서 | 선택 사항. 인덱스 필터의 프로젝션입니다. | ||||||||||
| 문서 | 작업에 사용할 데이터 정렬을 지정합니다. 데이터 정렬을 사용하면 대소문자 및 악센트 표시 규칙과 같은 문자열 비교에 대한 언어별 규칙을 지정할 수 있습니다. 데이터 정렬 옵션의 구문은 다음과 같습니다:
데이터 정렬을 지정할 때 데이터 정렬이 지정되지 않았지만 컬렉션에 기본 데이터 정렬이 있는 경우( 컬렉션 또는 연산에 대한 데이터 정렬이 지정되지 않은 경우, MongoDB는 이전 버전에서 문자열 비교에 사용된 간단한 이진 비교를 사용합니다. 한 연산에 대해 여러 데이터 정렬을 지정할 수 없습니다. 예를 들어 필드별로 서로 다른 데이터 정렬을 지정할 수 없으며 정렬과 함께 찾기를 수행하는 경우 찾기 와 정렬에서 각각 다른 데이터 정렬을 사용하는 것은 허용되지 않습니다. MongoDB 6.0부터 인덱스 필터는 이전에 명령을 MongoDB 8.0 부터는 인덱스 필터 를 추가하는 대신 쿼리 설정을 사용합니다. 인덱스 필터는 MongoDB 8.0 부터 더 이상 사용되지 않습니다. 쿼리 설정에는 인덱스 필터보다 더 많은 기능이 있습니다. 또한 인덱스 필터는 영구적이지 않으며 모든 클러스터 노드에 대한 인덱스 필터를 쉽게 만들 수 없습니다. 쿼리 설정을 추가하고 예제를 탐색하려면 | ||||||||||
| 배열 | |||||||||||
| any | 선택 사항. 이 명령에 첨부할 사용자 제공 코멘트입니다. 설정되면 이 설명은 다음 위치에서 이 명령의 레코드와 함께 표시됩니다.
댓글은 유효한 모든 BSON types (문자열, 정수, 객체, 배열 등)이 될 수 있습니다. |
인덱스 필터는 서버 프로세스가 실행되는 동안에만 존재하며 종료 후에는 유지되지 않습니다. 인덱스 필터를 지우려면 planCacheClearFilters
명령을 사용합니다.
필요한 액세스 권한
사용자는 planCacheIndexFilter
조치를 포함하는 액세스 권한이 있어야 합니다.
예시
조건자로만 구성된 계획 캐시 쿼리 형태에 필터 설정
다음 예에서는 orders
collection에 대한 인덱스 필터를 만들어 프로젝션 및 정렬 없이 status
필드의 동등성 매치로만 구성된 쿼리의 경우 쿼리 옵티마이저는 지정된 두 인덱스만 평가하고 컬렉션 스캔은 다음에 대해 성공적인 계획:
db.runCommand( { planCacheSetFilter: "orders", query: { status: "A" }, indexes: [ { cust_id: 1, status: 1 }, { status: 1, order_date: -1 } ] } )
쿼리 조건자에서는 필드 이름을 포함한 조건자의 구조만 중요합니다. 값은 중요하지 않습니다. 따라서 생성된 필터는 다음 작업에 적용됩니다.
db.orders.find( { status: "D" } ) db.orders.find( { status: "P" } )
MongoDB 가 계획 캐시 쿼리 형태 에 인덱스 필터하다 를 적용 할지 여부를 확인하려면 db.collection.explain()
또는 cursor.explain()
메서드의indexFilterSet
필드 를 확인합니다.
술어, 프로젝션 및 정렬로 구성된 계획 캐시 쿼리 형태에 필터 설정
다음 예제에서는 orders
collection에 대한 인덱스 필터를 만듭니다. 이 필터는 조건자가 item
필드의 동등성 매치인 쿼리에 적용되며, 여기서 quantity
필드만 프로젝션되고 order_date
기준 오름차순 정렬이 지정됩니다.
db.runCommand( { planCacheSetFilter: "orders", query: { item: "ABC" }, projection: { quantity: 1, _id: 0 }, sort: { order_date: 1 }, indexes: [ { item: 1, order_date: 1 , quantity: 1 } ] } )
계획 캐시 쿼리 형태 의 경우 쿼리 옵티마이저 { item: 1, order_date: 1, quantity: 1 }
인덱스 를 사용하는 인덱싱된 계획만 고려합니다.
조건자와 데이터 정렬로 구성된 계획 캐시 쿼리 형태에 필터 설정
다음 예제에서는 orders
collection에 대한 인덱스 필터를 만듭니다. 이 필터는 조건자가 item
필드 및 데이터 정렬 en_US
(영어 미국)에서 동등성 매치인 쿼리에 적용됩니다.
db.runCommand( { planCacheSetFilter: "orders", query: { item: "Movie" }, collation: { locale: "en_US" }, indexes: [ { item: 1, order_date: 1 , quantity: 1 } ] } )
계획 캐시 쿼리 형태 의 경우 쿼리 옵티마이저 인덱스 { item: 1, order_date: 1, quantity: 1 }
를 사용하는 인덱싱된 계획만 사용합니다.
MongoDB 부터 6.0 인덱스 필터는 명령을 planCacheSetFilter
사용하여 이전에 설정한 데이터 정렬 을 사용합니다.
MongoDB 8.0 부터는 인덱스 필터 를 추가하는 대신 쿼리 설정을 사용합니다. 인덱스 필터는 MongoDB 8.0 부터 더 이상 사용되지 않습니다.
쿼리 설정에는 인덱스 필터보다 더 많은 기능이 있습니다. 또한 인덱스 필터는 영구적이지 않으며 모든 클러스터 노드에 대한 인덱스 필터를 쉽게 만들 수 없습니다. 쿼리 설정을 추가하고 예제를 탐색하려면 setQuerySettings
를 참조하세요.