쿼리 형태
버전 8.0에서 변경되었습니다.
쿼리 형태 는 유사한 쿼리를 함께 그룹 하는 사양 설정하다 입니다. 사양에는 필터, 정렬, 프로젝션, 집계 파이프라인 단계, 네임스페이스 등이 포함될 수 있습니다. 사양이 유사한 쿼리는 쿼리 형태 가 동일합니다.
참고
MongoDB 8.0 부터 기존 쿼리 형태 의 이름이 계획 캐시 쿼리 형태 로 변경되고 queryHash
필드 의 이름이 planCacheShapeHash
로 변경됩니다. 계획 캐시 쿼리 형태를 구분하는 명령의 구성 요소는 계획 캐시 쿼리 형태 정의를 참조하세요. MongoDB 8.0 은(는) 이 페이지에 표시된 대로 새로운 쿼리 형태 와 기존 계획 캐시 쿼리 형태 를 사용합니다.
MongoDB 8.0 및 이전 버전에서 기존 계획 캐시 쿼리 형태 는 다음을 지원합니다.
MongoDB 8.0 부터 새로운 쿼리 형태 가 지원됩니다.
setQuerySettings
를 사용하여 추가할 수 있는 쿼리 설정입니다. (이 페이지의 뒷부분에 나와 있듯이 쿼리 설정은 쿼리 형태 에 대한 인덱스와 실행 설정을 지정합니다.)계획 캐시 쿼리 형태 에서도 지원되는 필드 및 작업입니다. 예:
filter
,sort
및projection
.대부분의 필드와 피연산자는
find
,distinct
및aggregate
명령에 사용할 수 있습니다. 명령의 필드와 피연산자를 보려면 각 명령 페이지의 구문 섹션을 참조하세요.기존 계획 캐시 쿼리 형태 형태보다 범위 쿼리 형태를 지원 하는
find
,aggregation
및distinct
명령의 전체 구조입니다.작업 거부 필터 를 사용하여 지정된 쿼리 형태 를 가진
find
,aggregation
및distinct
명령을 차단 합니다.전체 집계 파이프라인.
MongoDB 8.0 부터는 $querySettings
파이프라인 단계를 사용하여 각 쿼리 형태 에 지정된 쿼리 설정을 반환할 수 있습니다.
예시
다음 섹션에서는 다음 예시 pizzaOrders
컬렉션 에 대한 쿼리 형태가 포함된 예제를 보여줍니다.
db.pizzaOrders.insertMany( [ { _id: 0, type: "pepperoni", size: "small", price: 19, totalNumber: 10, orderDate: ISODate( "2023-03-13T08:14:30Z" ) }, { _id: 1, type: "pepperoni", size: "medium", price: 20, totalNumber: 20, orderDate: ISODate( "2023-03-13T09:13:24Z" ) }, { _id: 2, type: "pepperoni", size: "large", price: 21, totalNumber: 30, orderDate: ISODate( "2023-03-17T09:22:12Z" ) }, { _id: 3, type: "cheese", size: "small", price: 12, totalNumber: 15, orderDate: ISODate( "2023-03-13T11:21:39.736Z" ) } ] )
쿼리 형태 일치
다음 예시 쿼리 형태 는 기본값 test
데이터베이스 의 pizzaOrders
컬렉션 에 대한 find
명령의 사양을 보여줍니다.
find: "pizzaOrders", filter: { orderDate: { $gt: ISODate( "2023-01-20T00:00:00Z" ) } }, sort: { totalNumber: 1 }, $db: "test"
예시 필터하다 는 주문 날짜가 지정된 날짜보다 큰 문서로 문서를 제한합니다. 이 예시 에서는 주문한 총 피자 수를 오름차순으로 정렬합니다.
MongoDB 8.0 queryShapeHash
및 planCacheShapeHash
16진수 문자열을 보려면 explain
명령을 사용할 수 있습니다.
다음 explain
예제에는 동일한 쿼리 형태 를 가진 쿼리가 포함되어 있습니다.
db.pizzaOrders.explain().find( { orderDate: { $gt: ISODate( "2024-05-10T05:15:35Z" ) } } ). sort( { totalNumber: 1 } ) db.pizzaOrders.explain().find( { orderDate: { $gt: ISODate( "2024-02-05T07:07:16Z" ) } } ). sort( { totalNumber: 1 } ) db.pizzaOrders.explain().find( { orderDate: { $gt: ISODate( "2023-03-08T08:12:25Z" ) } } ). sort( { totalNumber: 1 } )
쿼리 형태가 동일하기 때문에 explain
출력은 각 예제에 대해 동일한 queryShapeHash
와 각 예제에 대해 동일한 planCacheShapeHash
를 갖습니다. 예를 예시 다음과 같습니다.
queryShapeHash: 'AB8ECADEE8F0EB0F447A30744EB4813AE7E0BFEF523B0870CA10FCBC87F5D8F1' planCacheShapeHash: '48E51110'
다양한 쿼리 형태
쿼리 의 사양이 다른 경우 쿼리 의 형태도 달라집니다. 예를 예시 쿼리 에 다른 필터하다, 정렬, 프로젝션, 네임스페이스 또는 집계 파이프라인 단계 가 있는 경우입니다.
이전 섹션의 예시 에서는 totalNumber
필드 예시 기준으로 정렬합니다. 쿼리 정렬을 totalNumber
에서 다른 필드 로 변경하면 쿼리의 쿼리 쿼리 형태 가 달라집니다.
예를 예시 피자 price
를 기준으로 정렬하면 쿼리 형태 가 변경됩니다.
db.pizzaOrders.explain().find( { orderDate: { $gt: ISODate( "2023-01-20T00:00:00Z" ) } } ). sort( { price: 1 } )
쿼리 형태 가 이전 섹션의 형태와 다르기 때문에 explain
출력은 이전 예시 와 다른 queryShapeHash
및 다른 planCacheShapeHash
을 갖습니다. 예를 예시 다음과 같습니다.
queryShapeHash: 'AC1ECADBE8F1EB0F417A30741AB4813BE7E0BFEF523B0870CA11FCBC87F1A8B2' planCacheShapeHash: '31A52130'
행동
MongoDB 8.0 부터 컬렉션에 대한 인덱스 필터 대신 쿼리 형태에 대한 쿼리 설정을 추가합니다. 인덱스 필터는 MongoDB 8.0 부터 더 이상 사용되지 않습니다. 쿼리 설정에는 인덱스 필터보다 더 많은 기능이 있으며 인덱스 필터는 클러스터 종료 후에 지속되지 않습니다.
쿼리 설정을 사용하면 클러스터 내 쿼리 형태 의 모든 실행에 인덱스 를 사용할 수 있습니다. 또한 작업으로 인해 과도한 클러스터 워크로드 가 발생하지 않도록 작업 거부 필터하다 를 사용하여 쿼리 형태 와 관련된 모든 작업을 거부할 수 있습니다.
쿼리 옵티마이저 쿼리 계획 중에 쿼리 설정을 추가 입력으로 사용합니다. 쿼리 설정은 쿼리 형태 가 일치하는 쿼리 를 실행 하기 위해 선택한 계획에 영향을 줍니다.
시작하기
쿼리 형태 에 대한 쿼리 설정을 추가하려면
setQuerySettings
를 사용합니다.쿼리 설정을 삭제 하려면
removeQuerySettings
를 사용합니다.쿼리 설정을 조회 하려면 집계 파이프라인 에서
$querySettings
단계를 사용합니다.쿼리 형태 를 차단 하려면 작업 거부 필터하다 를 사용합니다.