A query do MongoDB Search retorna informações sobre o $search plano de query e a estatística de execução quando a query é executada com o explain método ativado. Quando você executa uma query explain com, o MongoDB Search retorna um documentoBSON contendo estatísticas e metadados que descrevem como a query foi executada internamente no Lucene.
Dica
Sintaxe
db.<myCollection>.explain("<verbosity>").aggregate([ { $search: { "<operator>": { "<operator-options>" } } } ])
Detalhamento
O modo Verbosidade controla o comportamento do explain e a quantidade de informações retornadas. O valor pode ser um dos seguintes, em ordem decrescente de verbosidade:
Informações sobre o plano de query , incluindo os campos | |
Informações sobre o plano de query, incluindo os campos | |
queryPlanner (padrão) | Informações sobre o plano de query. Não inclui os campos |
Saída
A query com o método explain retorna os seguintes campos no objeto stages.$_internalSearchMongotRemote :
Opção | Tipo | Propósito |
|---|---|---|
| documento | Contém a query que você executou. |
| documento | Contém os |
| array de números inteiros | Contém o tamanho de cada lote de documentos que |
Explicação de resultados
O explain método retorna um documento BSON com os seguintes campos no explain documento .
Opção | Tipo | necessidade | Propósito |
|---|---|---|---|
| documento | Opcional | Descreve as estatísticas de execução do coletor. Se |
| documento | Opcional | |
| matriz de documentos | Opcional | Contém detalhes por partição de índice. Isso é retornado apenas se você tiver configurado duas ou mais partições de índice. |
| documento | Opcional | Contém metadados úteis. |
| documento | Opcional | Descreve as estatísticas de execução da query. Isso não é retornado. Se |
| documento | Opcional | Detalhes sobre a recuperação de dados por documento do Lucene após a execução da query. Isso não é retornado para o modo de detalhamento |
| documento | Opcional | Detalha o uso de recursos da query quando ela foi executada. Isso não é retornado para o modo de detalhamento |
collectors
O documento BSON collectors contém os seguintes campos:
Campo | Tipo | necessidade | Propósito |
|---|---|---|---|
| documento | Obrigatório | Estatísticas de todos os coletores da query. As estatísticas relatadas representam o valor máximo em todos os coletores usados na query ou uma soma da estatística em todos os subcoletores. As estatísticas de tempo são somadas para refletir o tempo total gasto em todos os coletores para toda a query. Para saber mais, consulte |
| documento | Opcional | |
| documento | Opcional |
allCollectorStats
O documento allCollectorStats BSON descreve as estatísticas dos coletores em todos os coletores especificados na query, incluindo facet e sort. Ele contém as seguintes chaves:
Campo | Descrição |
|---|---|
| Acompanha a duração e o número de resultados coletados pelo coletor. |
| Estatísticas que rastreiam a duração total e o número de vezes que um |
| Estatísticas que monitoram a duração total e o número de vezes que um pontuador foi configurado no coletor. |
facet
O facet é um documento BSON que detalha estatísticas de query e execução quando você especifica uma faceta na query. Ele contém os seguintes campos:
Opção | Tipo | necessidade | Propósito |
|---|---|---|---|
| documento | Opcional | Exibe estatísticas apenas para o coletor |
| documento | Opcional | Exibe estatísticas relacionadas à criação do objeto interno do Lucene que contém todos os agrupamentos de facetas. Ele contém o campo |
| documento | Obrigatório | Mapeia o campo que está sendo facetado para suas cardinalidades tanto nos documentos que corresponderam à query quanto em todo o índice do Lucene. Ele fornece as seguintes informações de cardinalidade para cada campo:
|
sort
O sort é um documento BSON que detalha as estatísticas de query e execução quando você especifica uma ordenação na query. Ele contém os seguintes campos:
Opção | Tipo | necessidade | Propósito |
|---|---|---|---|
| documento | Opcional | Acompanha estatísticas relacionadas à execução de
|
| documento | Obrigatório | Mapeia o campo que está sendo ordenado para a lista de tipos de dados presentes no índice para o campo. |
highlight
O highlight é um documento BSON que detalha estatísticas de query e execução quando você especifica realce na query. Ele contém os seguintes campos:
Opção | Tipo | necessidade | Propósito |
|---|---|---|---|
| List<String> | Obrigatório | Lista de todos os campos realçados. Se você especificou um caminho curinga na seção |
| Área de Execução de Consulta | Opcional | Estatísticas de invocação e temporização relacionadas à configuração e execução de destaques. Ele contém os seguintes campos:
|
indexPartitionExplain
o indexPartitionExplain contém Resultados de explicação para cada partição de índice. Os elementos de nível superior collectors e query estão dentro das informações explain de cada partição de índice e ausentes no nível superior.
metadata
O metadata contém metadados úteis, como os seguintes:
Campo | Tipo | necessidade | Propósito |
|---|---|---|---|
| String | Opcional | Versão atual de |
| String | Opcional | Etiqueta legível por humanos que identifica o host |
| String | Opcional | Índice de pesquisa do MongoDB usado na query. |
| Documento | Opcional | Opções de cursor dadas a |
| Inteiro | Opcional | Número total de objetos de índice no índice, incluindo documentos excluídos. |
query
O documento BSON query descreve as estatísticas de execução da query. Ele contém os seguintes campos:
Campo | Tipo | necessidade | Propósito |
|---|---|---|---|
| string | Opcional | Caminho para o operador, somente se não for a raiz. |
| string | Obrigatório | Nome da query Lucene que o operador do MongoDB Search criou. Consulte |
| string | Opcional | O analisador MongoDB Search usado com a query. |
| documento | Obrigatório | Informações sobre a query do Lucene. Consulte |
| documento | Opcional |
|
args
A resposta de explicação de um comando de pesquisa contém informações sobre a query executada com esse comando. A resposta no campo args inclui detalhes estruturados de quais queries do Lucene foram executadas MongoDB Search para satisfazer uma query $search.
Esta seção contém:
Algumas das queries do Lucene que os operadores do MongoDB Search criam
Opções de query do Lucene incluídas no resumo estruturado
Exemplo de resumo estruturado da query Lucene para cada tipo de query Lucene
Observação
Sobre os exemplos
Os exemplos desta seção são baseados em queries executadas nos conjuntos de dados de amostra com o queryPlanner modo de detalhamento. Na resposta de exemplo:
mongotQueryo campo mostra o operador MongoDB Search e a query que foi executada.explain.typemostra a query Lucene que o operador criou.
Para exemplos completos, consulte Exemplos.
BooleanQueryPara Lucene
BooleanQuery, o resumo estruturado inclui detalhes sobre as seguintes opções:CampoTiponecessidadeDescriçãomustOpcional
Cláusulas que devem corresponder.
mustNotOpcional
Cláusulas que não devem corresponder.
shouldOpcional
Cláusulas que deveriam corresponder.
filterOpcional
Cláusulas que deveriam corresponder.
minimumShouldMatchInteiro
Opcional
O número mínimo de
shouldcláusulas que devem corresponder.
ConstantScoreQueryPara consultas de pontuação constantes, o resumo estruturado inclui detalhes sobre as seguintes opções:
CampoTiponecessidadeDescriçãoqueryObrigatório
Filho de
ConstantScoreQuery.O exemplo a seguir mostra a resposta
explainpara uma query executada na coleçãosample_airbnb.listingsAndReviews.1 { 2 "stages" : [ 3 { 4 "$_internalSearchMongotRemote" : { 5 "mongotQuery" : { 6 "equals" : { 7 "path" : "host.host_identity_verified", 8 "value" : true 9 } 10 }, 11 "explain" : { 12 "type" : "ConstantScoreQuery", 13 "args" : { 14 "query" : { 15 "type" : "TermQuery", 16 "args" : { 17 "path" : "host.host_identity_verified", 18 "value" : "T" 19 } 20 } 21 } 22 } 23 } 24 }, 25 { 26 "$_internalSearchIdLookup" : { } 27 } 28 ], 29 ... 30 }
FunctionScoreQueryPara consultas do Lucene
FunctionScoreQuery, o resumo estruturado inclui detalhes sobre as seguintes opções:CampoTiponecessidadeDescriçãoscoreFunctionstring
Obrigatório
Expressão de pontuação usada na consulta.
queryObrigatório
A consulta.
O exemplo a seguir mostra a resposta
explainpara uma query executada na coleçãosample_airbnb.listingsAndReviews.1 { 2 "stages" : [ 3 { 4 "$_internalSearchMongotRemote" : { 5 "mongotQuery" : { 6 "near" : { 7 "path" : "accomodates", 8 "origin" : 8, 9 "pivot" : 2 10 } 11 }, 12 "explain" : { 13 "type" : "BooleanQuery", 14 "args" : { 15 "must" : [ ], 16 "mustNot" : [ ], 17 "should" : [ 18 { 19 "type" : "BooleanQuery", 20 "args" : { 21 "must" : [ ], 22 "mustNot" : [ ], 23 "should" : [ 24 { 25 "type" : "FunctionScoreQuery", 26 "args" : { 27 "scoreFunction" : "expr(pivot / (pivot + abs(origin - value)))", 28 "query" : { 29 "type" : "LongDistanceFeatureQuery", 30 "args" : { }, 31 "stats" : { } 32 } 33 } 34 } 35 ], 36 "filter" : [ 37 { 38 "type" : "PointRangeQuery", 39 "args" : { 40 "path" : "accomodates", 41 "representation" : "double", 42 "gte" : 8.000000000000002, 43 "lte" : NaN 44 } 45 } 46 ], 47 "minimumShouldMatch" : 0 48 } 49 }, 50 { 51 "type" : "LongDistanceFeatureQuery", 52 "args" : { }, 53 "stats" : { } 54 } 55 ], 56 "filter" : [ ], 57 "minimumShouldMatch" : 0 58 } 59 } 60 }, 61 ... 62 }, 63 ... 64 ], 65 ... 66 }
LatLonPointDistanceQueryPara queries do Lucene
LatLonPointDistanceQuery, a resposta contém apenas umstats.O exemplo a seguir mostra a resposta
explainpara uma query executada na coleçãosample_airbnb.listingsAndReviews.1 { 2 "stages" : [ 3 { 4 "$_internalSearchMongotRemote" : { 5 "mongotQuery" : { 6 "geoWithin" : { 7 "path" : "address.location", 8 "circle" : { 9 "radius" : 4800, 10 "center" : { 11 "type" : "Point", 12 "coordinates" : [ 13 -122.419472, 14 37.765302 15 ] 16 } 17 } 18 } 19 }, 20 "explain" : { 21 "type" : "LatLonPointDistanceQuery", 22 "args" : { } 23 } 24 } 25 }, 26 ... 27 ], 28 ... 29 }
LatLonShapeQueryPara queries do Lucene
LatLonShapeQuery, a resposta contém apenas umstats.O exemplo a seguir mostra a resposta
explainpara uma query executada na coleçãosample_airbnb.listingsAndReviews.1 { 2 "stages" : [ 3 { 4 "$_internalSearchMongotRemote" : { 5 "mongotQuery" : { 6 "geoShape" : { 7 "path" : "address.location", 8 "relation" : "within", 9 "geometry" : { 10 "type" : "Polygon", 11 "coordinates" : [ 12 [ 13 [ -74.3994140625, 40.5305017757 ], 14 [ -74.7290039063, 40.5805846641 ], 15 [ -74.7729492188, 40.9467136651 ], 16 [ -74.0698242188, 41.1290213475 ], 17 [ -73.65234375, 40.9964840144 ], 18 [ -72.6416015625, 40.9467136651 ], 19 [ -72.3559570313, 40.7971774152 ], 20 [ -74.3994140625, 40.5305017757 ] 21 ] 22 ] 23 } 24 } 25 }, 26 "explain" : { 27 "type" : "LatLonShapeQuery", 28 "args" : { } 29 } 30 }, 31 ... 32 }, 33 ... 34 ], 35 ... 36 }
LongDistanceFeatureQueryPara o Lucene
LongDistanceFeatureQuery, a resposta contém apenas umstats.O exemplo a seguir mostra a resposta
explainpara uma query executada na coleçãosample_mflix.movies.1 { 2 "stages" : [ 3 { 4 "$_internalSearchMongotRemote" : { 5 "mongotQuery" : { 6 "near" : { 7 "path" : "released", 8 "origin" : ISODate("1915-09-13T00:00:00Z"), 9 "pivot" : 7776000000 10 } 11 }, 12 "explain" : { 13 "type" : "LongDistanceFeatureQuery", 14 "args" : { } 15 } 16 }, 17 ... 18 }, 19 ... 20 ], 21 ... 22 }
MultiTermQueryConstantScoreWrapperPara consultas do Lucene
MultiTermQueryConstantScoreWrapper, o resumo estruturado inclui detalhes sobre os seguintes argumentos:CampoTiponecessidadeDescriçãoqueriesLista<Explicar resultados>
Obrigatório
Lista de consultas.
O exemplo a seguir mostra a resposta
explainpara uma query executada na coleçãosample_airbnb.listingsAndReviews.1 { 2 "stages" : [ 3 { 4 "$_internalSearchMongotRemote" : { 5 "mongotQuery" : { 6 "regex" : { 7 "path" : "access", 8 "query" : "full(.{0,5})", 9 "allowAnalyzedField" : true 10 } 11 }, 12 "explain" : { 13 "type" : "MultiTermQueryConstantScoreWrapper", 14 "args" : { 15 "queries" : [ 16 { 17 "type" : "DefaultQuery", 18 "args" : { 19 "queryType" : "RegexpQuery" 20 } 21 } 22 ] 23 } 24 } 25 }, 26 ... 27 }, 28 ... 29 ], 30 ... 31 }
PhraseQueryPara consultas do Lucene
PhraseQuery, o resumo estruturado inclui detalhes sobre os seguintes argumentos:CampoTiponecessidadeDescriçãopathString
Obrigatório
Campo indexado para pesquisar.
queryString
Obrigatório
String ou strings para pesquisar.
slopNúmero
Obrigatório
Distância permitida entre palavras na frase
query.O exemplo a seguir mostra a resposta
explainpara uma query executada na coleçãosample_airbnb.listingsAndReviews.1 { 2 "stages" : [ 3 { 4 "$_internalSearchMongotRemote" : { 5 "mongotQuery" : { 6 "phrase" : { 7 "path" : "description", 8 "query" : "comfortable apartment", 9 "slop" : 2 10 } 11 }, 12 "explain" : { 13 "type" : "PhraseQuery", 14 "args" : { 15 "path" : "description", 16 "query" : "[comfortable, apartment]", 17 "slop" : 2 18 } 19 } 20 }, 21 ... 22 }, 23 ... 24 ], 25 ... 26 }
PointRangeQueryPara consultas do Lucene
PointRangeQuery, o resumo estruturado inclui detalhes sobre os seguintes argumentos:CampoTiponecessidadeDescriçãopathString
Obrigatório
Campo indexado para pesquisar.
representationString
Opcional
Representação numérica. Queries sobre dados classificados por data não incluem representação.
gteNúmero
Opcional
Limite inferior da consulta.
lteNúmero
Opcional
Limite superior da consulta.
O exemplo a seguir mostra a resposta
explainpara uma query executada na coleçãosample_airbnb.listingsAndReviews.1 { 2 "stages" : [ 3 { 4 "$_internalSearchMongotRemote" : { 5 "mongotQuery" : { 6 "range" : { 7 "path" : "number_of_reviews", 8 "gt" : 5 9 } 10 }, 11 "explain" : { 12 "type" : "BooleanQuery", 13 "args" : { 14 "must" : [ ], 15 "mustNot" : [ ], 16 "should" : [ 17 { 18 "type" : "PointRangeQuery", 19 "args" : { 20 "path" : "number_of_reviews", 21 "representation" : "double", 22 "gte" : 5.000000000000001 23 } 24 }, 25 { 26 "type" : "PointRangeQuery", 27 "args" : { 28 "path" : "number_of_reviews", 29 "representation" : "int64", 30 "gte" : NumberLong(6) 31 } 32 } 33 ], 34 "filter" : [ ], 35 "minimumShouldMatch" : 0 36 } 37 } 38 }, 39 ... 40 }, 41 ... 42 ], 43 ... 44 }
TermQueryPara queries de termo, o resumo estruturado inclui detalhes sobre os seguintes argumentos:
CampoTiponecessidadeDescriçãopathString
Obrigatório
Campo indexado para pesquisar.
valueString
Obrigatório
String a ser pesquisada.
O exemplo a seguir mostra a resposta
explainpara uma query executada na coleçãosample_airbnb.listingsAndReviews.1 { 2 "stages" : [ 3 { 4 "$_internalSearchMongotRemote" : { 5 "mongotQuery" : { 6 "queryString" : { 7 "defaultPath" : "summary", 8 "query" : "quiet" 9 } 10 }, 11 "explain" : { 12 "type" : "TermQuery", 13 "args" : { 14 "path" : "summary", 15 "value" : "quiet" 16 } 17 } 18 }, 19 ... 20 }, 21 ... 22 ], 23 ... 24 }
DefaultQueries Lucene que não são explicitamente definidas por outra query Lucene são serializadas utilizando a query padrão. O resumo estruturado inclui detalhes sobre a seguinte opção:
CampoTiponecessidadeDescriçãoqueryTypeString
Obrigatório.
Tipo de consulta Lucene.
O exemplo a seguir mostra a resposta
explainpara uma query executada na coleçãosample_airbnb.listingsAndReviews.1 { 2 "stages" : [ 3 { 4 "$_internalSearchMongotRemote" : { 5 "mongotQuery" : { 6 "near" : { 7 "origin" : { 8 "type" : "Point", 9 "coordinates" : [ 10 -8.61308, 11 41.1413 12 ] 13 }, 14 "pivot" : 1000, 15 "path" : "address.location" 16 } 17 }, 18 "explain" : { 19 "type" : "DefaultQuery", 20 "args" : { 21 "queryType" : "LatLonPointDistanceFeatureQuery" 22 } 23 } 24 }, 25 ... 26 }, 27 ... 28 ], 29 ... 30 }
stats
A resposta explain para os modos de detalhamento executionStats e allPlansExecution inclui um campo stats que contém informações sobre quanto tempo uma query gasta em vários estágios de sua execução.
Detalhamento do tempo
O detalhamento do tempo descreve as estatísticas de execução pertinentes a áreas de execução da query. Os campos a seguir mostram o detalhamento do tempo:
Campo | Tipo | Descrição |
|---|---|---|
| Long | |
| Documento |
Áreas de query
As estatísticas estão disponíveis para as seguintes áreas de query:
Opção | Descrição | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Estatísticas relacionadas à execução da query Lucene. Há duas tarefas cujas contagens de invocação são enumeradas nesta área:
O tempo gasto nessa área está relacionado à estrutura da query e não é baseado no número de resultados que são iterados e pontuados. Por exemplo: | |||||||||||
| Estatísticas relacionadas à iteração e à correspondência de documentos de resultados. Essa estatística mostra o tempo necessário para determinar qual documento é a próxima correspondência. O tempo gasto na correspondência de resultados pode variar significativamente, dependendo da natureza da query. Há duas tarefas cujas contagens de invocação são enumeradas nesta área:
Por exemplo: | |||||||||||
| Estatísticas relacionadas à pontuação de documentos no conjunto de resultados. Há duas tarefas cujas contagens de invocação são enumeradas nesta área:
Por exemplo: |
resultMaterialization
O documento resultMaterialization mostra o tempo que mongot leva para realizar o seguinte:
Recupere os dados de resultados armazenados no Lucene no formato de
_idoustoredSource.Serialize os dados no formato BSON antes de enviá-los para
mongod.
Para aprender mais, consulte stats.
resourceUsage
O documento resourceUsage mostra o recurso utilizado para executar a query. Ele contém os seguintes campos:
Campo | Tipo | necessidade | Propósito |
|---|---|---|---|
| Long | Obrigatório | Número de falhas de página principais, que ocorrem quando o sistema não consegue encontrar os dados necessários na memória, resultando na leitura do armazenamento de apoio, como disco, durante a execução da query. |
| Long | Obrigatório | Número de falhas de página menores, que ocorrem quando os dados estão no cache de página, mas ainda não foram mapeados para a tabela de páginas do processo. |
| Long | Obrigatório | Tempo da CPU, em milissegundos, gasto no espaço do usuário. |
| Long | Obrigatório | Tempo da CPU, em milissegundos, gasto no espaço do sistema. |
| Inteiro | Obrigatório | Número máximo de threads que |
| Inteiro | Obrigatório | Número total de lotes que |
Exemplos
Os exemplos seguintes utilizam a collection movies no banco de dados sample_mflix.
Dica
Se já tiver carregado o conjunto de dados de amostra, consulte o tutorial Início Rápido do MongoDB Search para criar uma definição de índice e executar queries do MongoDB Search.
allPlansExecution
O exemplo a seguir usa diferentes operadores para executar uma query no campo title com o modo de detalhamento allPlansExecution.
db.movies.explain("allPlansExecution").aggregate([ { $search: { "text": { "path": "title", "query": "yark", "fuzzy": { "maxEdits": 1, "maxExpansions": 100, } } } } ])
1 { 2 explainVersion: '1', 3 stages: [ 4 { 5 '$_internalSearchMongotRemote': { 6 mongotQuery: { 7 text: { 8 path: 'title', 9 query: 'yark', 10 fuzzy: { maxEdits: 1, maxExpansions: 100 } 11 } 12 }, 13 explain: { 14 query: { 15 type: 'BooleanQuery', 16 args: { 17 must: [], 18 mustNot: [], 19 should: [ 20 { 21 type: 'BoostQuery', 22 args: { 23 query: { 24 type: 'TermQuery', 25 args: { path: 'title', value: 'mark' }, 26 stats: { 27 context: { millisElapsed: 0 }, 28 match: { millisElapsed: 0 }, 29 score: { millisElapsed: 0 } 30 } 31 }, 32 boost: 0.75 33 }, 34 stats: { 35 context: { 36 millisElapsed: 0.209279, 37 invocationCounts: { 38 createWeight: Long('2'), 39 createScorer: Long('18') 40 } 41 }, 42 match: { 43 millisElapsed: 0.028079, 44 invocationCounts: { nextDoc: Long('22') } 45 }, 46 score: { 47 millisElapsed: 0.01706, 48 invocationCounts: { score: Long('16') } 49 } 50 } 51 }, 52 { 53 type: 'BoostQuery', 54 args: { 55 query: { 56 type: 'TermQuery', 57 args: { path: 'title', value: 'yard' }, 58 stats: { 59 context: { millisElapsed: 0 }, 60 match: { millisElapsed: 0 }, 61 score: { millisElapsed: 0 } 62 } 63 }, 64 boost: 0.75 65 }, 66 stats: { 67 context: { 68 millisElapsed: 0.136254, 69 invocationCounts: { 70 createWeight: Long('2'), 71 createScorer: Long('14') 72 } 73 }, 74 match: { 75 millisElapsed: 0.008556, 76 invocationCounts: { nextDoc: Long('10') } 77 }, 78 score: { 79 millisElapsed: 0.006096, 80 invocationCounts: { score: Long('6') } 81 } 82 } 83 }, 84 { 85 type: 'BoostQuery', 86 args: { 87 query: { 88 type: 'TermQuery', 89 args: { path: 'title', value: 'york' }, 90 stats: { 91 context: { millisElapsed: 0 }, 92 match: { millisElapsed: 0 }, 93 score: { millisElapsed: 0 } 94 } 95 }, 96 boost: 0.75 97 }, 98 stats: { 99 context: { 100 millisElapsed: 0.303568, 101 invocationCounts: { 102 createWeight: Long('2'), 103 createScorer: Long('18') 104 } 105 }, 106 match: { 107 millisElapsed: 0.374856, 108 invocationCounts: { nextDoc: Long('62') } 109 }, 110 score: { 111 millisElapsed: 0.892383, 112 invocationCounts: { score: Long('56') } 113 } 114 } 115 }, 116 { 117 type: 'BoostQuery', 118 args: { 119 query: { 120 type: 'TermQuery', 121 args: { path: 'title', value: 'ark' }, 122 stats: { 123 context: { millisElapsed: 0 }, 124 match: { millisElapsed: 0 }, 125 score: { millisElapsed: 0 } 126 } 127 }, 128 boost: 0.6666666269302368 129 }, 130 stats: { 131 context: { 132 millisElapsed: 8.379562, 133 invocationCounts: { 134 createWeight: Long('2'), 135 createScorer: Long('10') 136 } 137 }, 138 match: { 139 millisElapsed: 2.073272, 140 invocationCounts: { nextDoc: Long('6') } 141 }, 142 score: { 143 millisElapsed: 0.004063, 144 invocationCounts: { score: Long('4') } 145 } 146 } 147 }, 148 { 149 type: 'BoostQuery', 150 args: { 151 query: { 152 type: 'TermQuery', 153 args: { path: 'title', value: 'dark' }, 154 stats: { 155 context: { millisElapsed: 0 }, 156 match: { millisElapsed: 0 }, 157 score: { millisElapsed: 0 } 158 } 159 }, 160 boost: 0.75 161 }, 162 stats: { 163 context: { 164 millisElapsed: 0.679029, 165 invocationCounts: { 166 createWeight: Long('2'), 167 createScorer: Long('18') 168 } 169 }, 170 match: { 171 millisElapsed: 5.500198, 172 invocationCounts: { nextDoc: Long('172') } 173 }, 174 score: { 175 millisElapsed: 2.465502, 176 invocationCounts: { score: Long('166') } 177 } 178 } 179 }, 180 { 181 type: 'BoostQuery', 182 args: { 183 query: { 184 type: 'TermQuery', 185 args: { path: 'title', value: 'park' }, 186 stats: { 187 context: { millisElapsed: 0 }, 188 match: { millisElapsed: 0 }, 189 score: { millisElapsed: 0 } 190 } 191 }, 192 boost: 0.75 193 }, 194 stats: { 195 context: { 196 millisElapsed: 0.221919, 197 invocationCounts: { 198 createWeight: Long('2'), 199 createScorer: Long('18') 200 } 201 }, 202 match: { 203 millisElapsed: 0.116139, 204 invocationCounts: { nextDoc: Long('60') } 205 }, 206 score: { 207 millisElapsed: 0.056817, 208 invocationCounts: { score: Long('54') } 209 } 210 } 211 } 212 ], 213 filter: [], 214 minimumShouldMatch: 0 215 }, 216 stats: { 217 context: { 218 millisElapsed: 25.303419, 219 invocationCounts: { createWeight: Long('2'), createScorer: Long('12') } 220 }, 221 match: { 222 millisElapsed: 10.533183, 223 invocationCounts: { nextDoc: Long('308') } 224 }, 225 score: { 226 millisElapsed: 5.501189, 227 invocationCounts: { score: Long('302') } 228 } 229 } 230 }, 231 collectStats: { 232 allCollectorStats: { 233 millisElapsed: 6.735626, 234 invocationCounts: { 235 collect: Long('302'), 236 competitiveIterator: Long('6'), 237 setScorer: Long('6') 238 } 239 }, 240 facet: { collectorStats: { millisElapsed: 0 } } 241 }, 242 resultMaterialization: { 243 stats: { 244 millisElapsed: 176.613905, 245 invocationCounts: { retrieveAndSerialize: Long('2') } 246 } 247 }, 248 metadata: { 249 <hostname>.mongodb.netmongotVersion: '1.42.0', 250 mongotHostName: '<hostname>.mongodb.net', 251 indexName: 'default', 252 cursorOptions: { batchSize: 108, requiresSearchSequenceToken: false }, 253 totalLuceneDocs: 21349 254 }, 255 resourceUsage: { 256 majorFaults: Long('99'), 257 minorFaults: Long('192'), 258 userTimeMs: Long('80'), 259 systemTimeMs: Long('10'), 260 maxReportingThreads: 1, 261 numBatches: 2 262 } 263 }, 264 requiresSearchMetaCursor: false, 265 internalMongotBatchSizeHistory: [ Long('108'), Long('162') ] 266 }, 267 nReturned: Long('151'), 268 executionTimeMillisEstimate: Long('83') 269 }, 270 { 271 '$_internalSearchIdLookup': { 272 subPipeline: [ 273 { '$match': { _id: { '$eq': '_id placeholder' } } } 274 ], 275 totalDocsExamined: Long('151'), 276 totalKeysExamined: Long('151'), 277 numDocsFilteredByIdLookup: Long('0') 278 }, 279 nReturned: Long('151'), 280 executionTimeMillisEstimate: Long('88') 281 } 282 ], 283 queryShapeHash: '6FD3791F785FA329D4ECD1171E0E5AF6772C18F5F0A7A50FC416D080A93C8CB7', 284 serverInfo: { 285 host: '<hostname>.mongodb.net', 286 port: 27017, 287 version: '8.2.0', 288 gitVersion: '13e629eeccd63f00d17568fc4c12b7530fa34b54' 289 }, 290 serverParameters: { 291 ... 292 }, 293 command: { 294 aggregate: 'movies', 295 pipeline: [ 296 { 297 '$search': { 298 text: { 299 path: 'title', 300 query: 'yark', 301 fuzzy: { maxEdits: 1, maxExpansions: 100 } 302 } 303 } 304 } 305 ], 306 cursor: {}, 307 '$db': 'sample_mflix' 308 }, 309 ok: 1, 310 '$clusterTime': { 311 clusterTime: Timestamp({ t: 1758295936, i: 19 }), 312 signature: { 313 hash: Binary.createFromBase64('+CanjrL9jdXPTLa2sUaNPtImkBc=', 0), 314 keyId: Long('7551379485140975621') 315 } 316 }, 317 operationTime: Timestamp({ t: 1758295936, i: 19 }) 318 }
db.movies.explain("allPlansExecution").aggregate([ { $search: { "text": { "path": "title", "query": "prince" }, "highlight": { "path": "title", "maxNumPassages": 1, "maxCharsToExamine": 40 } } }, { $project: { "description": 1, "_id": 0, "highlights": { "$meta": "searchHighlights" } } } ])
1 { 2 explainVersion: '1', 3 stages: [ 4 { 5 '$_internalSearchMongotRemote': { 6 mongotQuery: { 7 text: { path: 'title', query: 'prince' }, 8 highlight: { path: 'title', maxNumPassages: 1, maxCharsToExamine: 40 } 9 }, 10 explain: { 11 query: { 12 type: 'TermQuery', 13 args: { path: 'title', value: 'prince' }, 14 stats: { 15 context: { 16 millisElapsed: 9.880819, 17 invocationCounts: { createWeight: Long('1'), createScorer: Long('6') } 18 }, 19 match: { 20 millisElapsed: 3.566358, 21 invocationCounts: { nextDoc: Long('28') } 22 }, 23 score: { 24 millisElapsed: 2.762687, 25 invocationCounts: { score: Long('25') } 26 } 27 } 28 }, 29 collectStats: { 30 allCollectorStats: { 31 millisElapsed: 3.238152, 32 invocationCounts: { 33 collect: Long('25'), 34 competitiveIterator: Long('3'), 35 setScorer: Long('3') 36 } 37 }, 38 facet: { collectorStats: { millisElapsed: 0 } } 39 }, 40 highlight: { 41 resolvedHighlightPaths: [ '$type:string/title' ], 42 stats: { 43 millisElapsed: 157.543967, 44 invocationCounts: { 45 executeHighlight: Long('1'), 46 setupHighlight: Long('1') 47 } 48 } 49 }, 50 resultMaterialization: { 51 stats: { 52 millisElapsed: 3.781115, 53 invocationCounts: { retrieveAndSerialize: Long('1') } 54 } 55 }, 56 metadata: { 57 <hostname>.mongodb.netmongotVersion: '1.42.0', 58 mongotHostName: '<hostname>.mongodb.net', 59 indexName: 'default', 60 cursorOptions: { batchSize: 108, requiresSearchSequenceToken: false }, 61 totalLuceneDocs: 21349 62 }, 63 resourceUsage: { 64 majorFaults: Long('42'), 65 minorFaults: Long('167'), 66 userTimeMs: Long('50'), 67 systemTimeMs: Long('0'), 68 maxReportingThreads: 1, 69 numBatches: 1 70 } 71 }, 72 requiresSearchMetaCursor: false, 73 internalMongotBatchSizeHistory: [ Long('108') ] 74 }, 75 nReturned: Long('25'), 76 executionTimeMillisEstimate: Long('0') 77 }, 78 { 79 '$_internalSearchIdLookup': { 80 subPipeline: [ 81 { '$match': { _id: { '$eq': '_id placeholder' } } } 82 ], 83 totalDocsExamined: Long('25'), 84 totalKeysExamined: Long('25'), 85 numDocsFilteredByIdLookup: Long('0') 86 }, 87 nReturned: Long('25'), 88 executionTimeMillisEstimate: Long('1') 89 }, 90 { 91 '$project': { 92 description: true, 93 highlights: { '$meta': 'searchHighlights' }, 94 _id: false 95 }, 96 nReturned: Long('25'), 97 executionTimeMillisEstimate: Long('1') 98 } 99 ], 100 queryShapeHash: 'D08444272924C1E04A6E99D0CD4BF82FD929893862B3356F79EC18BBD1F0EF0C', 101 serverInfo: { 102 host: '<hostname>.mongodb.net', 103 port: 27017, 104 version: '8.2.0', 105 gitVersion: '13e629eeccd63f00d17568fc4c12b7530fa34b54' 106 }, 107 serverParameters: { 108 internalQueryFacetBufferSizeBytes: 104857600, 109 internalQueryFacetMaxOutputDocSizeBytes: 104857600, 110 internalLookupStageIntermediateDocumentMaxSizeBytes: 104857600, 111 internalDocumentSourceGroupMaxMemoryBytes: 104857600, 112 internalQueryMaxBlockingSortMemoryUsageBytes: 104857600, 113 internalQueryProhibitBlockingMergeOnMongoS: 0, 114 internalQueryMaxAddToSetBytes: 104857600, 115 internalDocumentSourceSetWindowFieldsMaxMemoryBytes: 104857600, 116 internalQueryFrameworkControl: 'trySbeRestricted', 117 internalQueryPlannerIgnoreIndexWithCollationForRegex: 1 118 }, 119 command: { 120 aggregate: 'movies', 121 pipeline: [ 122 { 123 '$search': { 124 text: { path: 'title', query: 'prince' }, 125 highlight: { path: 'title', maxNumPassages: 1, maxCharsToExamine: 40 } 126 } 127 }, 128 { 129 '$project': { 130 description: 1, 131 _id: 0, 132 highlights: { '$meta': 'searchHighlights' } 133 } 134 } 135 ], 136 cursor: {}, 137 '$db': 'sample_mflix' 138 }, 139 ok: 1, 140 '$clusterTime': { 141 clusterTime: Timestamp({ t: 1758302099, i: 1 }), 142 signature: { 143 hash: Binary.createFromBase64('pUGxwCVnDOBIObmhURJQ1a1UwC8=', 0), 144 keyId: Long('7551379485140975621') 145 } 146 }, 147 operationTime: Timestamp({ t: 1758302099, i: 1 }) 148 }
db.movies.explain("allPlansExecution").aggregate([ { "$searchMeta": { "facet": { "operator": { "near": { "path": "released", "origin": ISODate("1921-11-01T00:00:00.000+00:00"), "pivot": 7776000000 } }, "facets": { "genresFacet": { "type": "string", "path": "genres" }, "yearFacet" : { "type" : "number", "path" : "year", "boundaries" : [1910,1920,1930,1940] } } } } } ])
1 { 2 explainVersion: '1', 3 stages: [ 4 { 5 '$searchMeta': { 6 mongotQuery: { 7 facet: { 8 operator: { 9 near: { 10 path: 'released', 11 origin: ISODate('1921-11-01T00:00:00.000Z'), 12 pivot: 7776000000 13 } 14 }, 15 facets: { 16 genresFacet: { type: 'string', path: 'genres' }, 17 yearFacet: { 18 type: 'number', 19 path: 'year', 20 boundaries: [ 1910, 1920, 1930, 1940 ] 21 } 22 } 23 } 24 }, 25 explain: { 26 query: { 27 type: 'LongDistanceFeatureQuery', 28 args: {}, 29 stats: { 30 context: { 31 millisElapsed: 4.141763, 32 invocationCounts: { createWeight: Long('1'), createScorer: Long('6') } 33 }, 34 match: { 35 millisElapsed: 24.986327, 36 invocationCounts: { nextDoc: Long('20881') } 37 }, 38 score: { 39 millisElapsed: 33.324657, 40 invocationCounts: { score: Long('20878') } 41 } 42 } 43 }, 44 collectStats: { 45 allCollectorStats: { 46 millisElapsed: 72.243101, 47 invocationCounts: { 48 collect: Long('20878'), 49 competitiveIterator: Long('3'), 50 setScorer: Long('3') 51 } 52 }, 53 facet: { 54 collectorStats: { 55 millisElapsed: 10.424621, 56 invocationCounts: { collect: Long('20878'), setScorer: Long('3') } 57 }, 58 createCountsStats: { 59 millisElapsed: 60.095261, 60 invocationCounts: { generateFacetCounts: Long('2') } 61 }, 62 stringFacetCardinalities: { genresFacet: { queried: 10, total: 25 } } 63 } 64 }, 65 resultMaterialization: { 66 stats: { 67 millisElapsed: 13.764287, 68 invocationCounts: { retrieveAndSerialize: Long('1') } 69 } 70 }, 71 metadata: { 72 <hostname>.mongodb.netmongotVersion: '1.42.0', 73 mongotHostName: '<hostname>.mongodb.net', 74 indexName: 'default', 75 totalLuceneDocs: 21349 76 }, 77 resourceUsage: { 78 majorFaults: Long('10'), 79 minorFaults: Long('13'), 80 userTimeMs: Long('20'), 81 systemTimeMs: Long('0'), 82 maxReportingThreads: 1, 83 numBatches: 1 84 } 85 }, 86 requiresSearchMetaCursor: true 87 }, 88 nReturned: Long('1'), 89 executionTimeMillisEstimate: Long('336') 90 } 91 ], 92 queryShapeHash: '582DB864C9BCFB96896CF1A3079CF70FAC10A9A1E19E8D66DF20A2BB40424FB5', 93 serverInfo: { 94 host: '<hostname>.mongodb.net', 95 port: 27017, 96 version: '8.2.0', 97 gitVersion: '13e629eeccd63f00d17568fc4c12b7530fa34b54' 98 }, 99 serverParameters: { 100 ... 101 }, 102 command: { 103 aggregate: 'movies', 104 pipeline: [ 105 { 106 '$searchMeta': { 107 facet: { 108 operator: { 109 near: { 110 path: 'released', 111 origin: ISODate('1921-11-01T00:00:00.000Z'), 112 pivot: 7776000000 113 } 114 }, 115 facets: { 116 genresFacet: { type: 'string', path: 'genres' }, 117 yearFacet: { 118 type: 'number', 119 path: 'year', 120 boundaries: [ 1910, 1920, 1930, 1940 ] 121 } 122 } 123 } 124 } 125 } 126 ], 127 cursor: {}, 128 '$db': 'sample_mflix' 129 }, 130 ok: 1, 131 '$clusterTime': { 132 clusterTime: Timestamp({ t: 1758304279, i: 1 }), 133 signature: { 134 hash: Binary.createFromBase64('DI9+ZTogU1QxHCWId6QLcA4R4tQ=', 0), 135 keyId: Long('7551379485140975621') 136 } 137 }, 138 operationTime: Timestamp({ t: 1758304279, i: 1 }) 139 }
db.movies.explain("allPlansExecution").aggregate([ { $search: { "text": { "path": "title", "query": "yark", "fuzzy": { "maxEdits": 1, "maxExpansions": 100, } } } } ])
1 { 2 explainVersion: '1', 3 stages: [ 4 { 5 '$_internalSearchMongotRemote': { 6 mongotQuery: { 7 text: { 8 path: 'title', 9 query: 'yark', 10 fuzzy: { maxEdits: 1, maxExpansions: 100 } 11 } 12 }, 13 explain: { 14 query: { 15 type: 'BooleanQuery', 16 args: { 17 must: [], 18 mustNot: [], 19 should: [ 20 { 21 type: 'BoostQuery', 22 args: { 23 query: { 24 type: 'TermQuery', 25 args: { path: 'title', value: 'mark' }, 26 stats: { 27 context: { millisElapsed: 0 }, 28 match: { millisElapsed: 0 }, 29 score: { millisElapsed: 0 } 30 } 31 }, 32 boost: 0.75 33 }, 34 stats: { 35 context: { 36 millisElapsed: 0.164466, 37 invocationCounts: { 38 createWeight: Long('2'), 39 createScorer: Long('18') 40 } 41 }, 42 match: { 43 millisElapsed: 0.055889, 44 invocationCounts: { nextDoc: Long('22') } 45 }, 46 score: { 47 millisElapsed: 0.01638, 48 invocationCounts: { score: Long('16') } 49 } 50 } 51 }, 52 { 53 type: 'BoostQuery', 54 args: { 55 query: { 56 type: 'TermQuery', 57 args: { path: 'title', value: 'yard' }, 58 stats: { 59 context: { millisElapsed: 0 }, 60 match: { millisElapsed: 0 }, 61 score: { millisElapsed: 0 } 62 } 63 }, 64 boost: 0.75 65 }, 66 stats: { 67 context: { 68 millisElapsed: 0.109841, 69 invocationCounts: { 70 createWeight: Long('2'), 71 createScorer: Long('14') 72 } 73 }, 74 match: { 75 millisElapsed: 0.009747, 76 invocationCounts: { nextDoc: Long('10') } 77 }, 78 score: { 79 millisElapsed: 0.005449, 80 invocationCounts: { score: Long('6') } 81 } 82 } 83 }, 84 { 85 type: 'BoostQuery', 86 args: { 87 query: { 88 type: 'TermQuery', 89 args: { path: 'title', value: 'york' }, 90 stats: { 91 context: { millisElapsed: 0 }, 92 match: { millisElapsed: 0 }, 93 score: { millisElapsed: 0 } 94 } 95 }, 96 boost: 0.75 97 }, 98 stats: { 99 context: { 100 millisElapsed: 0.140144, 101 invocationCounts: { 102 createWeight: Long('2'), 103 createScorer: Long('18') 104 } 105 }, 106 match: { 107 millisElapsed: 0.058885, 108 invocationCounts: { nextDoc: Long('62') } 109 }, 110 score: { 111 millisElapsed: 0.877508, 112 invocationCounts: { score: Long('56') } 113 } 114 } 115 }, 116 { 117 type: 'BoostQuery', 118 args: { 119 query: { 120 type: 'TermQuery', 121 args: { path: 'title', value: 'ark' }, 122 stats: { 123 context: { millisElapsed: 0 }, 124 match: { millisElapsed: 0 }, 125 score: { millisElapsed: 0 } 126 } 127 }, 128 boost: 0.6666666269302368 129 }, 130 stats: { 131 context: { 132 millisElapsed: 0.26056, 133 invocationCounts: { 134 createWeight: Long('2'), 135 createScorer: Long('10') 136 } 137 }, 138 match: { 139 millisElapsed: 1.028141, 140 invocationCounts: { nextDoc: Long('6') } 141 }, 142 score: { 143 millisElapsed: 0.004226, 144 invocationCounts: { score: Long('4') } 145 } 146 } 147 }, 148 { 149 type: 'BoostQuery', 150 args: { 151 query: { 152 type: 'TermQuery', 153 args: { path: 'title', value: 'dark' }, 154 stats: { 155 context: { millisElapsed: 0 }, 156 match: { millisElapsed: 0 }, 157 score: { millisElapsed: 0 } 158 } 159 }, 160 boost: 0.75 161 }, 162 stats: { 163 context: { 164 millisElapsed: 0.3029, 165 invocationCounts: { 166 createWeight: Long('2'), 167 createScorer: Long('18') 168 } 169 }, 170 match: { 171 millisElapsed: 2.294511, 172 invocationCounts: { nextDoc: Long('172') } 173 }, 174 score: { 175 millisElapsed: 1.806661, 176 invocationCounts: { score: Long('166') } 177 } 178 } 179 }, 180 { 181 type: 'BoostQuery', 182 args: { 183 query: { 184 type: 'TermQuery', 185 args: { path: 'title', value: 'park' }, 186 stats: { 187 context: { millisElapsed: 0 }, 188 match: { millisElapsed: 0 }, 189 score: { millisElapsed: 0 } 190 } 191 }, 192 boost: 0.75 193 }, 194 stats: { 195 context: { 196 millisElapsed: 0.154143, 197 invocationCounts: { 198 createWeight: Long('2'), 199 createScorer: Long('18') 200 } 201 }, 202 match: { 203 millisElapsed: 0.052283, 204 invocationCounts: { nextDoc: Long('60') } 205 }, 206 score: { 207 millisElapsed: 0.050278, 208 invocationCounts: { score: Long('54') } 209 } 210 } 211 } 212 ], 213 filter: [], 214 minimumShouldMatch: 0 215 }, 216 stats: { 217 context: { 218 millisElapsed: 2.024454, 219 invocationCounts: { createWeight: Long('2'), createScorer: Long('12') } 220 }, 221 match: { 222 millisElapsed: 4.020593, 223 invocationCounts: { nextDoc: Long('308') } 224 }, 225 score: { 226 millisElapsed: 3.181962, 227 invocationCounts: { score: Long('302') } 228 } 229 } 230 }, 231 collectStats: { 232 allCollectorStats: { 233 millisElapsed: 4.062801, 234 invocationCounts: { 235 collect: Long('302'), 236 competitiveIterator: Long('6'), 237 setScorer: Long('6') 238 } 239 }, 240 facet: { collectorStats: { millisElapsed: 0 } } 241 }, 242 resultMaterialization: { 243 stats: { 244 millisElapsed: 127.205476, 245 invocationCounts: { retrieveAndSerialize: Long('2') } 246 } 247 }, 248 metadata: { 249 <hostname>.mongodb.netmongotVersion: '1.42.0', 250 mongotHostName: '<hostname>.mongodb.net', 251 indexName: 'default', 252 cursorOptions: { batchSize: 108, requiresSearchSequenceToken: false }, 253 totalLuceneDocs: 21349 254 }, 255 resourceUsage: { 256 majorFaults: Long('100'), 257 minorFaults: Long('31'), 258 userTimeMs: Long('20'), 259 systemTimeMs: Long('10'), 260 maxReportingThreads: 1, 261 numBatches: 2 262 } 263 }, 264 requiresSearchMetaCursor: false, 265 internalMongotBatchSizeHistory: [ Long('108'), Long('162') ] 266 }, 267 nReturned: Long('151'), 268 executionTimeMillisEstimate: Long('57') 269 }, 270 { 271 '$_internalSearchIdLookup': { 272 subPipeline: [ 273 { '$match': { _id: { '$eq': '_id placeholder' } } } 274 ], 275 totalDocsExamined: Long('151'), 276 totalKeysExamined: Long('151'), 277 numDocsFilteredByIdLookup: Long('0') 278 }, 279 nReturned: Long('151'), 280 executionTimeMillisEstimate: Long('64') 281 } 282 ], 283 queryShapeHash: '6FD3791F785FA329D4ECD1171E0E5AF6772C18F5F0A7A50FC416D080A93C8CB7', 284 serverInfo: { 285 host: '<hostname>.mongodb.net', 286 port: 27017, 287 version: '8.2.0', 288 gitVersion: '13e629eeccd63f00d17568fc4c12b7530fa34b54' 289 }, 290 serverParameters: { 291 ... 292 }, 293 command: { 294 aggregate: 'movies', 295 pipeline: [ 296 { 297 '$search': { 298 text: { 299 path: 'title', 300 query: 'yark', 301 fuzzy: { maxEdits: 1, maxExpansions: 100 } 302 } 303 } 304 } 305 ], 306 cursor: {}, 307 '$db': 'sample_mflix' 308 }, 309 ok: 1, 310 '$clusterTime': { 311 clusterTime: Timestamp({ t: 1758302299, i: 1 }), 312 signature: { 313 hash: Binary.createFromBase64('pCKOPlBY/K4IObOkqDlOSnbRqw0=', 0), 314 keyId: Long('7551379485140975621') 315 } 316 }, 317 operationTime: Timestamp({ t: 1758302299, i: 1 }) 318 }
queryPlanner
O exemplo a seguir usa diferentes operadores para executar uma query no campo title com o modo de detalhamento queryPlanner.
db.movies.explain("queryPlanner").aggregate([ { $search: { "text": { "path": "title", "query": "yark", "fuzzy": { "maxEdits": 1, "maxExpansions": 100, } } } } ])
1 { 2 explainVersion: '1', 3 stages: [ 4 { 5 '$_internalSearchMongotRemote': { 6 mongotQuery: { 7 text: { 8 path: 'title', 9 query: 'yark', 10 fuzzy: { maxEdits: 1, maxExpansions: 100 } 11 } 12 }, 13 explain: { 14 query: { 15 type: 'BooleanQuery', 16 args: { 17 must: [], 18 mustNot: [], 19 should: [ 20 { 21 type: 'BoostQuery', 22 args: { 23 query: { 24 type: 'TermQuery', 25 args: { path: 'title', value: 'park' } 26 }, 27 boost: 0.75 28 } 29 }, 30 { 31 type: 'BoostQuery', 32 args: { 33 query: { 34 type: 'TermQuery', 35 args: { path: 'title', value: 'york' } 36 }, 37 boost: 0.75 38 } 39 }, 40 { 41 type: 'BoostQuery', 42 args: { 43 query: { 44 type: 'TermQuery', 45 args: { path: 'title', value: 'dark' } 46 }, 47 boost: 0.75 48 } 49 }, 50 { 51 type: 'BoostQuery', 52 args: { 53 query: { 54 type: 'TermQuery', 55 args: { path: 'title', value: 'mark' } 56 }, 57 boost: 0.75 58 } 59 }, 60 { 61 type: 'BoostQuery', 62 args: { 63 query: { 64 type: 'TermQuery', 65 args: { path: 'title', value: 'yard' } 66 }, 67 boost: 0.75 68 } 69 }, 70 { 71 type: 'BoostQuery', 72 args: { 73 query: { 74 type: 'TermQuery', 75 args: { path: 'title', value: 'ark' } 76 }, 77 boost: 0.6666666269302368 78 } 79 } 80 ], 81 filter: [], 82 minimumShouldMatch: 0 83 } 84 }, 85 metadata: { 86 <hostname>.mongodb.netmongotVersion: '1.42.0', 87 mongotHostName: '<hostname>.mongodb.net', 88 indexName: 'default', 89 totalLuceneDocs: 21349 90 } 91 }, 92 requiresSearchMetaCursor: false 93 } 94 }, 95 { 96 '$_internalSearchIdLookup': { 97 subPipeline: [ 98 { '$match': { _id: { '$eq': '_id placeholder' } } } 99 ] 100 } 101 } 102 ], 103 queryShapeHash: '6FD3791F785FA329D4ECD1171E0E5AF6772C18F5F0A7A50FC416D080A93C8CB7', 104 serverInfo: { 105 host: '<hostname>.mongodb.net', 106 port: 27017, 107 version: '8.2.0', 108 gitVersion: '13e629eeccd63f00d17568fc4c12b7530fa34b54' 109 }, 110 serverParameters: { 111 ... 112 }, 113 command: { 114 aggregate: 'movies', 115 pipeline: [ 116 { 117 '$search': { 118 text: { 119 path: 'title', 120 query: 'yark', 121 fuzzy: { maxEdits: 1, maxExpansions: 100 } 122 } 123 } 124 } 125 ], 126 cursor: {}, 127 '$db': 'sample_mflix' 128 }, 129 ok: 1, 130 '$clusterTime': { 131 clusterTime: Timestamp({ t: 1758305729, i: 1 }), 132 signature: { 133 hash: Binary.createFromBase64('IUnIrXR/VeUrj1cGgyEFlkoQKAM=', 0), 134 keyId: Long('7551379485140975621') 135 } 136 }, 137 operationTime: Timestamp({ t: 1758305729, i: 1 }) 138 }
db.movies.explain("queryPlanner").aggregate([ { $search: { "text": { "path": "title", "query": "prince" }, "highlight": { "path": "title", "maxNumPassages": 1, "maxCharsToExamine": 40 } } }, { $project: { "description": 1, "_id": 0, "highlights": { "$meta": "searchHighlights" } } } ])
1 { 2 explainVersion: '1', 3 stages: [ 4 { 5 '$_internalSearchMongotRemote': { 6 mongotQuery: { 7 text: { path: 'title', query: 'prince' }, 8 highlight: { path: 'title', maxNumPassages: 1, maxCharsToExamine: 40 } 9 }, 10 explain: { 11 query: { 12 type: 'TermQuery', 13 args: { path: 'title', value: 'prince' } 14 }, 15 highlight: { resolvedHighlightPaths: [ '$type:string/title' ] }, 16 metadata: { 17 <hostname>.mongodb.netmongotVersion: '1.42.0', 18 mongotHostName: '<hostname>.mongodb.net', 19 indexName: 'default', 20 totalLuceneDocs: 21349 21 } 22 }, 23 requiresSearchMetaCursor: false 24 } 25 }, 26 { 27 '$_internalSearchIdLookup': { 28 subPipeline: [ 29 { '$match': { _id: { '$eq': '_id placeholder' } } } 30 ] 31 } 32 }, 33 { 34 '$project': { 35 description: true, 36 highlights: { '$meta': 'searchHighlights' }, 37 _id: false 38 } 39 } 40 ], 41 queryShapeHash: 'D08444272924C1E04A6E99D0CD4BF82FD929893862B3356F79EC18BBD1F0EF0C', 42 serverInfo: { 43 host: '<hostname>.mongodb.net', 44 port: 27017, 45 version: '8.2.0', 46 gitVersion: '13e629eeccd63f00d17568fc4c12b7530fa34b54' 47 }, 48 serverParameters: { 49 ... 50 }, 51 command: { 52 aggregate: 'movies', 53 pipeline: [ 54 { 55 '$search': { 56 text: { path: 'title', query: 'prince' }, 57 highlight: { path: 'title', maxNumPassages: 1, maxCharsToExamine: 40 } 58 } 59 }, 60 { 61 '$project': { 62 description: 1, 63 _id: 0, 64 highlights: { '$meta': 'searchHighlights' } 65 } 66 } 67 ], 68 cursor: {}, 69 '$db': 'sample_mflix' 70 }, 71 ok: 1, 72 '$clusterTime': { 73 clusterTime: Timestamp({ t: 1758305809, i: 1 }), 74 signature: { 75 hash: Binary.createFromBase64('R7wN4/xS0eg0XFd23xeo/+hMPBY=', 0), 76 keyId: Long('7551379485140975621') 77 } 78 }, 79 operationTime: Timestamp({ t: 1758305809, i: 1 }) 80 }
db.movies.explain("queryPlanner").aggregate([ { "$searchMeta": { "facet": { "operator": { "near": { "path": "released", "origin": ISODate("1921-11-01T00:00:00.000+00:00"), "pivot": 7776000000 } }, "facets": { "genresFacet": { "type": "string", "path": "genres" }, "yearFacet" : { "type" : "number", "path" : "year", "boundaries" : [1910,1920,1930,1940] } } } } } ])
1 { 2 explainVersion: '1', 3 stages: [ 4 { 5 '$searchMeta': { 6 mongotQuery: { 7 facet: { 8 operator: { 9 near: { 10 path: 'released', 11 origin: ISODate('1921-11-01T00:00:00.000Z'), 12 pivot: 7776000000 13 } 14 }, 15 facets: { 16 genresFacet: { type: 'string', path: 'genres' }, 17 yearFacet: { 18 type: 'number', 19 path: 'year', 20 boundaries: [ 1910, 1920, 1930, 1940 ] 21 } 22 } 23 } 24 }, 25 explain: { 26 query: { type: 'LongDistanceFeatureQuery', args: {} }, 27 collectStats: { 28 facet: { 29 stringFacetCardinalities: { genresFacet: { queried: 10, total: 25 } } 30 } 31 }, 32 metadata: { 33 <hostname>.mongodb.netmongotVersion: '1.42.0', 34 mongotHostName: '<hostname>.mongodb.net', 35 indexName: 'default', 36 totalLuceneDocs: 21349 37 } 38 }, 39 requiresSearchMetaCursor: true 40 } 41 } 42 ], 43 queryShapeHash: '582DB864C9BCFB96896CF1A3079CF70FAC10A9A1E19E8D66DF20A2BB40424FB5', 44 serverInfo: { 45 host: '<hostname>.mongodb.net', 46 port: 27017, 47 version: '8.2.0', 48 gitVersion: '13e629eeccd63f00d17568fc4c12b7530fa34b54' 49 }, 50 serverParameters: { 51 ... 52 }, 53 command: { 54 aggregate: 'movies', 55 pipeline: [ 56 { 57 '$searchMeta': { 58 facet: { 59 operator: { 60 near: { 61 path: 'released', 62 origin: ISODate('1921-11-01T00:00:00.000Z'), 63 pivot: 7776000000 64 } 65 }, 66 facets: { 67 genresFacet: { type: 'string', path: 'genres' }, 68 yearFacet: { 69 type: 'number', 70 path: 'year', 71 boundaries: [ 1910, 1920, 1930, 1940 ] 72 } 73 } 74 } 75 } 76 } 77 ], 78 cursor: {}, 79 '$db': 'sample_mflix' 80 }, 81 ok: 1, 82 '$clusterTime': { 83 clusterTime: Timestamp({ t: 1758305859, i: 1 }), 84 signature: { 85 hash: Binary.createFromBase64('8Zm16MEkzHnPpP9uLJK1YlT7a3o=', 0), 86 keyId: Long('7551379485140975621') 87 } 88 }, 89 operationTime: Timestamp({ t: 1758305859, i: 1 }) 90 }
Para queries que especificam um estágio $limit no pipeline, os resultados do explain incluem a métrica mongotDocsRequested que mostra o número de documentos que o mongod solicitou do mongot.
Exemplo
{ "mongotQuery": {}, "explain": {}, "limit": <int>, "sortSpec": {}, "mongotDocsRequested": <int>, }
executionStats
O exemplo a seguir usa o autocomplete para consultar o campo title com o modo de detalhamento executionStats.
1 db.movies.explain("executionStats").aggregate([ 2 { 3 "$search": { 4 "autocomplete": { 5 "path": "title", 6 "query": "pre", 7 "fuzzy": { 8 "maxEdits": 1, 9 "prefixLength": 1, 10 "maxExpansions": 256 11 } 12 } 13 } 14 } 15 ])
1 { 2 explainVersion: '1', 3 stages: [ 4 { 5 '$_internalSearchMongotRemote': { 6 mongotQuery: { 7 autocomplete: { 8 path: 'title', 9 query: 'pre', 10 fuzzy: { maxEdits: 1, prefixLength: 1, maxExpansions: 256 } 11 } 12 }, 13 explain: { 14 query: { 15 type: 'BooleanQuery', 16 args: { 17 must: [ 18 { 19 type: 'MultiTermQueryConstantScoreBlendedWrapper', 20 args: { 21 queries: [ 22 { 23 type: 'DefaultQuery', 24 args: { queryType: 'AutomatonQuery' }, 25 stats: { 26 context: { millisElapsed: 0 }, 27 match: { millisElapsed: 0 }, 28 score: { millisElapsed: 0 } 29 } 30 } 31 ] 32 }, 33 stats: { 34 context: { 35 millisElapsed: 12.517877, 36 invocationCounts: { 37 createWeight: Long('4'), 38 createScorer: Long('48') 39 } 40 }, 41 match: { 42 millisElapsed: 0.970794, 43 invocationCounts: { nextDoc: Long('2436') } 44 }, 45 score: { 46 millisElapsed: 0.638731, 47 invocationCounts: { score: Long('2420') } 48 } 49 } 50 } 51 ], 52 mustNot: [], 53 should: [ 54 { 55 type: 'TermQuery', 56 args: { path: 'title', value: 'pre' }, 57 stats: { 58 context: { 59 millisElapsed: 1.481341, 60 invocationCounts: { 61 createWeight: Long('4'), 62 createScorer: Long('16') 63 } 64 }, 65 match: { millisElapsed: 0 }, 66 score: { millisElapsed: 0 } 67 } 68 } 69 ], 70 filter: [], 71 minimumShouldMatch: 0 72 }, 73 stats: { 74 context: { 75 millisElapsed: 15.118651, 76 invocationCounts: { createWeight: Long('4'), createScorer: Long('32') } 77 }, 78 match: { 79 millisElapsed: 1.923822, 80 invocationCounts: { nextDoc: Long('2436') } 81 }, 82 score: { 83 millisElapsed: 1.954216, 84 invocationCounts: { score: Long('2420') } 85 } 86 } 87 }, 88 collectStats: { 89 allCollectorStats: { 90 millisElapsed: 4.189904, 91 invocationCounts: { 92 collect: Long('2420'), 93 competitiveIterator: Long('16'), 94 setScorer: Long('16') 95 } 96 }, 97 facet: { collectorStats: { millisElapsed: 0 } } 98 }, 99 resultMaterialization: { 100 stats: { 101 millisElapsed: 21.876621, 102 invocationCounts: { retrieveAndSerialize: Long('4') } 103 } 104 }, 105 metadata: { 106 <hostname>.mongodb.netmongotVersion: '1.42.0', 107 mongotHostName: '<hostname>.mongodb.net', 108 indexName: 'default', 109 cursorOptions: { batchSize: 108, requiresSearchSequenceToken: false }, 110 totalLuceneDocs: 21349 111 }, 112 resourceUsage: { 113 majorFaults: Long('2'), 114 minorFaults: Long('242'), 115 userTimeMs: Long('40'), 116 systemTimeMs: Long('0'), 117 maxReportingThreads: 1, 118 numBatches: 4 119 } 120 }, 121 requiresSearchMetaCursor: false, 122 internalMongotBatchSizeHistory: [ Long('108'), Long('162'), Long('243'), Long('365') ] 123 }, 124 nReturned: Long('605'), 125 executionTimeMillisEstimate: Long('44') 126 }, 127 { 128 '$_internalSearchIdLookup': { 129 subPipeline: [ 130 { '$match': { _id: { '$eq': '_id placeholder' } } } 131 ], 132 totalDocsExamined: Long('605'), 133 totalKeysExamined: Long('605'), 134 numDocsFilteredByIdLookup: Long('0') 135 }, 136 nReturned: Long('605'), 137 executionTimeMillisEstimate: Long('91') 138 } 139 ], 140 queryShapeHash: '6FD3791F785FA329D4ECD1171E0E5AF6772C18F5F0A7A50FC416D080A93C8CB7', 141 serverInfo: { 142 host: '<hostname>.mongodb.net', 143 port: 27017, 144 version: '8.2.0', 145 gitVersion: '13e629eeccd63f00d17568fc4c12b7530fa34b54' 146 }, 147 serverParameters: { 148 ... 149 }, 150 command: { 151 aggregate: 'movies', 152 pipeline: [ 153 { 154 '$search': { 155 autocomplete: { 156 path: 'title', 157 query: 'pre', 158 fuzzy: { maxEdits: 1, prefixLength: 1, maxExpansions: 256 } 159 } 160 } 161 } 162 ], 163 cursor: {}, 164 '$db': 'sample_mflix' 165 }, 166 ok: 1, 167 '$clusterTime': { 168 clusterTime: Timestamp({ t: 1758306209, i: 1 }), 169 signature: { 170 hash: Binary.createFromBase64('MIipFR5NAfl728L6h4ueQeZBLGM=', 0), 171 keyId: Long('7551379485140975621') 172 } 173 }, 174 operationTime: Timestamp({ t: 1758306209, i: 1 }) 175 }
Para aprender mais sobre os elementos de resposta explain, consulte Explicar resultados.