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

쿼리 계획 및 실행 통계 조회

이 페이지의 내용

  • 구문
  • 상세
  • Explain 응답
  • 제한 사항
  • 예제
  • queryPlanner
  • executionStats

Atlas Search 쿼리는 explain 메서드로 쿼리를 실행할 때 $search 쿼리 계획 및 실행 통계에 대한 정보를 반환합니다. explain 을(를) 사용하여 쿼리를 실행하면 Atlas Search는 쿼리가 실행된 방법에 대한 정보가 포함된 BSON 문서를 반환합니다.

다음도 참조하세요.

explain 명령

db.<myCollection>.explain("<verbosity>").aggregate([
{
$search: {
"<operator>": {
"<operator-options>"
}
}
}
])

상세 모드에서는 explain의 동작과 반환되는 정보의 양을 제어합니다. 값은 다음 중 하나일 수 있습니다.

queryPlanner(기본값)
쿼리 계획에 대한 정보입니다. 쿼리에 대한 실행 통계가 포함된 stats 필드는 포함되지 않습니다.
쿼리에 대한 실행 통계가 포함된 stats 필드를 포함한 쿼리 계획에 대한 정보입니다.
쿼리에 대한 실행 통계가 포함된 stats 필드를 포함한 쿼리 계획에 대한 정보입니다.

다음도 참조하세요.

explain 응답은 쿼리의 실행 통계를 설명하는 키와 값이 포함된 BSON 문서입니다. 결과 세트의 explain 문서에는 다음 필드가 포함되어 있습니다.

옵션
유형
필요성
목적
path
문자열
옵션
연산자의 경로(루트가 아닌 경우에만).
type
문자열
필수 사항
Atlas Search 연산자가 생성한 루센 쿼리의 이름입니다. 자세한 내용은 루센 쿼리 구조화 요약 을 참조하세요.
analyzer
문자열
옵션
쿼리와 함께 사용된 Atlas Search 분석기 입니다.
args
문서
필수 사항
Lucene 쿼리 정보 자세한 내용은 Lucene 쿼리 구조화 요약을 참조하세요.
stats
문서
옵션
explainexecutionStats 또는 allPlansExecution 상세도로 실행된 경우 쿼리에 대한 explain 타이밍 분석.

explain으로 패싯 쿼리를 실행할 수 없습니다.

다음 예제에서는 sample_mflix 데이터베이스의 movies 컬렉션을 사용합니다.

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

다음 예시에서는 텍스트 연산자를 사용하여 queryPlanner 상세 모드로 title 필드를 쿼리합니다.

db.movies.explain("queryPlanner").aggregate([
{
$search: {
"text": {
"path": "title",
"query": "yark",
"fuzzy": {
"maxEdits": 1,
"maxExpansions": 100,
}
}
}
}
])

쿼리는 다음과 같은 결과를 반환합니다. explain 응답 요소에 대해 자세히 알아보려면 응답 설명을 참조하세요.

{
"stages" : [
{
"$_internalSearchMongotRemote" : {
"mongotQuery" : {
"text" : {
"path" : "title",
"query" : "yark",
"fuzzy" : {
"maxEdits" : 1,
"maxExpansions" : 100
}
}
},
"explain" : {
"type" : "BooleanQuery",
"args" : {
"must" : [ ],
"mustNot" : [ ],
"should" : [
{
"type" : "BoostQuery",
"args" : {
"query" : {
"type" : "TermQuery",
"args" : {
"path" : "title",
"value" : "ark"
}
},
"boost" : 0.6666666269302368
}
},
{
"type" : "BoostQuery",
"args" : {
"query" : {
"type" : "TermQuery",
"args" : {
"path" : "title",
"value" : "yard"
}
},
"boost" : 0.75
}
},
{
"type" : "BoostQuery",
"args" : {
"query" : {
"type" : "TermQuery",
"args" : {
"path" : "title",
"value" : "mark"
}
},
"boost" : 0.75
}
},
{
"type" : "BoostQuery",
"args" : {
"query" : {
"type" : "TermQuery",
"args" : {
"path" : "title",
"value" : "park"
}
},
"boost" : 0.75
}
},
{
"type" : "BoostQuery",
"args" : {
"query" : {
"type" : "TermQuery",
"args" : {
"path" : "title",
"value" : "dark"
}
},
"boost" : 0.75
}
},
{
"type" : "BoostQuery",
"args" : {
"query" : {
"type" : "TermQuery",
"args" : {
"path" : "title",
"value" : "york"
}
},
"boost" : 0.75
}
}
],
"filter" : [ ],
"minimumShouldMatch" : 0
}
}
}
},
{
"$_internalSearchIdLookup" : { }
}
],
"serverInfo" : {
"host" : "atlas-example-shard-00-01.mongodb.net",
"port" : 27017,
"version" : "4.4.3",
"gitVersion" : "913d6b62acfbb344dde1b116f4161360acd8fd13"
},
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1612457287, 1),
"signature" : {
"hash" : BinData(0,"kzn7hY7NOduVIqcfx+40ENKbMKQ="),
"keyId" : NumberLong("1234567890123456789")
}
},
"operationTime" : Timestamp(1612457287, 1)
}

파이프라인에서 $limit 단계를 지정하는 쿼리의 경우 explain 결과에는 mongodmongot 에서 요청한 문서 수를 보여주는 mongotDocsRequested 지표가 포함됩니다.

예제

{
"mongotQuery": {},
"explain": {},
"limit": <int>,
"sortSpec": {},
"mongotDocsRequested": <int>,
}

다음 예시에서는 자동 완성 연산자를 사용하여 executionStats 상세 모드로 title 필드를 쿼리합니다.

db.movies.explain("executionStats").aggregate([
{
"$search": {
"autocomplete": {
"path": "title",
"query": "pre",
"fuzzy": {
"maxEdits": 1,
"prefixLength": 1,
"maxExpansions": 256
}
}
}
}
])

쿼리는 다음과 같은 결과를 반환합니다. explain 응답 요소에 대해 자세히 알아보려면 응답 설명을 참조하세요.

{
"stages" : [
{
"$_internalSearchMongotRemote" : {
"mongotQuery" : {
"autocomplete" : {
"path" : "title",
"query" : "pre",
"fuzzy" : {
"maxEdits" : 1,
"prefixLength" : 1,
"maxExpansions" : 256
}
}
},
"explain" : {
"type" : "MultiTermQueryConstantScoreWrapper",
"args" : {
"queries" : [
{
"type" : "DefaultQuery",
"args" : {
"queryType" : "AutomatonQuery"
},
"stats" : {
"context" : {
"millisElapsed" : NumberDouble(0)
},
"match" : {
"millisElapsed" : NumberDouble(0)
},
"score" : {
"millisElapsed" : NumberDouble(0)
}
}
}
]
},
"stats" : {
"context" : {
"millisElapsed" : NumberDouble(0.816418),
"invocationCounts" : {
"createWeight" : NumberLong(1),
"createScorer" : NumberLong(2)
}
},
"match" : {
"millisElapsed" : NumberDouble(3.849778),
"invocationCounts" : {
"nextDoc" : NumberLong(656)
}
},
"score" : {
"millisElapsed" : NumberDouble(0.035349),
"invocationCounts" : {
"score" : NumberLong(655)
}
}
}
}
},
"nReturned" : NumberLong(0),
"executionTimeMillisEstimate" : NumberLong(20)
},
{
"$_internalSearchIdLookup" : { },
"nReturned" : NumberLong(0),
"executionTimeMillisEstimate" : NumberLong(20)
}
],
"serverInfo" : {
"host" : "atlas-example-shard-00-01.mongodb.net",
"port" : 27017,
"version" : "4.4.3",
"gitVersion" : "913d6b62acfbb344dde1b116f4161360acd8fd13"
},
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1612454116, 1),
"signature" : {
"hash" : BinData(0,"OY+SMPmdK//g6rFZkvSCQr3c3hM="),
"keyId" : NumberLong("1234567890123456789")
}
},
"operationTime" : Timestamp(1612454116, 1)
}
← 쿼리 테스트 및 실행