Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ /

쿼리 형태

이 페이지의 내용

  • 예시
  • 행동
  • 시작하기
  • 자세히 알아보기

버전 8.0에서 변경되었습니다.

쿼리 형태 는 유사한 쿼리를 함께 그룹 하는 사양 설정하다 입니다. 사양에는 필터, 정렬, 프로젝션, 집계 파이프라인 단계, 네임스페이스 등이 포함될 수 있습니다. 사양이 유사한 쿼리는 쿼리 형태 가 동일합니다.

참고

MongoDB 8.0 부터 기존 쿼리 형태 의 이름이 계획 캐시 쿼리 형태 로 변경되고 queryHash 필드 의 이름이 planCacheShapeHash 로 변경됩니다. 계획 캐시 쿼리 형태를 구분하는 명령의 구성 요소는 계획 캐시 쿼리 형태 정의를 참조하세요. MongoDB 8.0 은(는) 이 페이지에 표시된 대로 새로운 쿼리 형태 와 기존 계획 캐시 쿼리 형태 를 사용합니다.

MongoDB 8.0 및 이전 버전에서 기존 계획 캐시 쿼리 형태 는 다음을 지원합니다.

MongoDB 8.0 부터 새로운 쿼리 형태 가 지원됩니다.

  • setQuerySettings 를 사용하여 추가할 수 있는 쿼리 설정입니다. (이 페이지의 뒷부분에 나와 있듯이 쿼리 설정은 쿼리 형태 에 대한 인덱스와 실행 설정을 지정합니다.)

  • $queryStats 쿼리 형태 통계입니다.

  • 계획 캐시 쿼리 형태 에서도 지원되는 필드 및 작업입니다. 예: filter, sortprojection.

  • 대부분의 필드와 피연산자는 find, distinctaggregate 명령에 사용할 수 있습니다. 명령의 필드와 피연산자를 보려면 각 명령 페이지의 구문 섹션을 참조하세요.

  • 기존 계획 캐시 쿼리 형태 형태보다 범위 쿼리 형태를 지원 하는 find, aggregationdistinct 명령의 전체 구조입니다.

  • 작업 거부 필터 를 사용하여 지정된 쿼리 형태 를 가진 find, aggregationdistinct 명령을 차단 합니다.

  • 전체 집계 파이프라인.

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 queryShapeHashplanCacheShapeHash 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 부터 더 이상 사용되지 않습니다. 쿼리 설정에는 인덱스 필터보다 더 많은 기능이 있으며 인덱스 필터는 클러스터 종료 후에 지속되지 않습니다.

쿼리 설정을 사용하면 클러스터 내 쿼리 형태 의 모든 실행에 인덱스 를 사용할 수 있습니다. 또한 작업으로 인해 과도한 클러스터 워크로드 가 발생하지 않도록 작업 거부 필터하다 를 사용하여 쿼리 형태 와 관련된 모든 작업을 거부할 수 있습니다.

쿼리 옵티마이저 쿼리 계획 중에 쿼리 설정을 추가 입력으로 사용합니다. 쿼리 설정은 쿼리 형태 가 일치하는 쿼리 를 실행 하기 위해 선택한 계획에 영향을 줍니다.

돌아가기

쿼리 계획