Menu Docs
Página inicial do Docs
/ /

Como recuperar o plano de query e as estatísticas de execução

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

explicar comando

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

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 stats, que contêm estatísticas de execução da query. Inclui dados de execução parcial capturados durante a seleção do plano.

Informações sobre o plano de query, incluindo os campos stats, que contêm estatísticas de execução para a query.

queryPlanner (padrão)

Informações sobre o plano de query. Não inclui os campos stats, que contêm as estatísticas de execução da query.

A query com o método explain retorna os seguintes campos no objeto stages.$_internalSearchMongotRemote :

Opção
Tipo
Propósito

mongotQuery

documento

Contém a query que você executou.

explain

documento

Contém os explain resultados. Para saber mais, consulte Explicar resultados.

internalMongotBatchSizeHistory

array de números inteiros

Contém o tamanho de cada lote de documentos que mongot devolveu para mongod.

O explain método retorna um documento BSON com os seguintes campos no explain documento .

Opção
Tipo
necessidade
Propósito

collectors

documento

Opcional

Descreve as estatísticas de execução do coletor. Se indexPartitionExplain estiver presente, ele será aninhado dentro de cada indexPartitionExplain em vez de no nível superior.

highlight

documento

Opcional

Detalhes sobre a execução do realce para a query. Isso é retornado apenas se você especificou realce na query.

indexPartitionExplain

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.

metadata

documento

Opcional

Contém metadados úteis.

query

documento

Opcional

Descreve as estatísticas de execução da query. Isso não é retornado. Se indexPartitionExplain estiver presente, ele estará aninhado dentro de cada indexPartitionExplain, em vez de no nível superior.

resultMaterialization

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 queryPlanner.

resourceUsage

documento

Opcional

Detalha o uso de recursos da query quando ela foi executada. Isso não é retornado para o modo de detalhamento queryPlanner.

O documento BSON collectors contém os seguintes campos:

Campo
Tipo
necessidade
Propósito

allCollectorStats

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 allCollectorStats.

facet

documento

Opcional

Análise detalhada da query que especifica a faceta. Para aprender mais, consulte facet.

sort

documento

Opcional

Detalhamento da query que especifica a ordem. Para aprender mais, consulte sort.

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

collect

Acompanha a duração e o número de resultados coletados pelo coletor.

competitiveIterator

Estatísticas que rastreiam a duração total e o número de vezes que um competitiveIterator foi solicitado ao coletor.

setScorer

Estatísticas que monitoram a duração total e o número de vezes que um pontuador foi configurado no coletor.

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

collectorStats

documento

Opcional

Exibe estatísticas apenas para o coletor facet. As chaves aqui são idênticas às allCollectorStats. Você pode avaliar a diferença entre este e o allCollectorStats para determinar as estatísticas de execução do coletor sort se tiver usado sort na query.

createCountsStats

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 generateFacetCounts, que retorna as estatísticas que rastreiam a duração total e o número de vezes que mongot gera o objeto do Lucene que contém todas as facetas e suas contagens.

stringFacetFieldCardinalities

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:

  • queried - Representa a cardinalidade da faceta do campo em todos os documentos consultados.

  • total - Representa a cardinalidade da faceta do campo em todos os documentos no índice.

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

stats

documento

Opcional

Acompanha estatísticas relacionadas à execução de sort em todos os campos de ordenação. Ele contém os seguintes campos:

  • comparator - Exibe estatísticas e metadados sobre como o Lucene ordena os resultados.

    • setBottom - Retorna com que frequência o valor de classificação menos concorrente atual é atualizado com um valor novo e mais concorrente. Ao classificar, o MongoDB Search mantém o controle do valor inferior e, se um novo valor ultrapassar o valor inferior atual em relevância ou concorrência, essa métrica será incrementada.

    • compareBottom - Retorna as estatísticas de tempo e invocação relacionadas à comparação do valor bottom atual com um valor bottom candidato.

    • compareTop - Retorna as estatísticas de tempo e invocação relacionadas à comparação do valor top atual com um valor top candidato.

    • setHitsThresholdReached - Retorna as estatísticas de tempo e invocação relacionadas ao momento em que o número máximo de resultados (limit) foi alcançado.

    • competitiveIterator - Retorna as estatísticas de tempo e invocação relacionadas à iteração (somente) em documentos que provavelmente competirão pelos primeiros pontos nos resultados classificados.

    • setScorer - Retorna as estatísticas de tempo e invocação relacionadas ao cálculo da pontuação e da relevância dos documentos.

  • prunedResultIterator - Mostra as invocações e as estatísticas de tempo das chamadas dos métodos nextDoc e advance no Lucene competitiveIterator.

    Isso não estará presente na saída se for realizada uma classificação mista por tipo de dados.

    Ele contém apenas o campo nextDoc.

fieldInfos

documento

Obrigatório

Mapeia o campo que está sendo ordenado para a lista de tipos de dados presentes no índice para o campo.

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

resolvedHighlightPaths

List<String>

Obrigatório

Lista de todos os campos realçados. Se você especificou um caminho curinga na seção highlight da sua query, ela contém uma lista de caminhos de documentos totalmente resolvidos.

stats

Á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:

  • setupHighlight - Tempo necessário para configurar os objetos internos do Lucene utilizados durante a fase executeHighlight.

  • executeHighlight - Tempo necessário para executar a realce nos documentos correspondentes.

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.

O metadata contém metadados úteis, como os seguintes:

Campo
Tipo
necessidade
Propósito

mongotVersion

String

Opcional

Versão atual de mongot.

mongotHostName

String

Opcional

Etiqueta legível por humanos que identifica o host mongot.

indexName

String

Opcional

Índice de pesquisa do MongoDB usado na query.

cursorOptions

Documento

Opcional

Opções de cursor dadas a mongot.

totalLuceneDocs

Inteiro

Opcional

Número total de objetos de índice no índice, incluindo documentos excluídos.

O documento BSON query descreve as estatísticas de execução da query. Ele contém os seguintes campos:

Campo
Tipo
necessidade
Propósito

path

string

Opcional

Caminho para o operador, somente se não for a raiz.

type

string

Obrigatório

Nome da query Lucene que o operador do MongoDB Search criou. Consulte query para mais informações.

analyzer

string

Opcional

O analisador MongoDB Search usado com a query.

args

documento

Obrigatório

Informações sobre a query do Lucene. Consulte query para obter mais informações.

stats

documento

Opcional

stats para a query se explain foi executado com o detalhamento executionStats ou allPlansExecution.

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:

  • mongotQuery o campo mostra o operador MongoDB Search e a query que foi executada.

  • explain.type mostra a query Lucene que o operador criou.

Para exemplos completos, consulte Exemplos.

BooleanQuery

Para Lucene BooleanQuery, o resumo estruturado inclui detalhes sobre as seguintes opções:

Campo
Tipo
necessidade
Descrição

must

Opcional

Cláusulas que devem corresponder.

mustNot

Opcional

Cláusulas que não devem corresponder.

should

Opcional

Cláusulas que deveriam corresponder.

filter

Opcional

Cláusulas que deveriam corresponder.

minimumShouldMatch

Inteiro

Opcional

O número mínimo de should cláusulas que devem corresponder.

ConstantScoreQuery

Para consultas de pontuação constantes, o resumo estruturado inclui detalhes sobre as seguintes opções:

Campo
Tipo
necessidade
Descrição

query

Obrigatório

Filho de ConstantScoreQuery.

O exemplo a seguir mostra a resposta explain para uma query executada na coleção sample_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}
FunctionScoreQuery

Para consultas do Lucene FunctionScoreQuery, o resumo estruturado inclui detalhes sobre as seguintes opções:

Campo
Tipo
necessidade
Descrição

scoreFunction

string

Obrigatório

Expressão de pontuação usada na consulta.

query

Obrigatório

A consulta.

O exemplo a seguir mostra a resposta explain para uma query executada na coleção sample_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}
LatLonPointDistanceQuery

Para queries do Lucene LatLonPointDistanceQuery, a resposta contém apenas um stats.

O exemplo a seguir mostra a resposta explain para uma query executada na coleção sample_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}
LatLonShapeQuery

Para queries do Lucene LatLonShapeQuery, a resposta contém apenas um stats.

O exemplo a seguir mostra a resposta explain para uma query executada na coleção sample_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}
LongDistanceFeatureQuery

Para o Lucene LongDistanceFeatureQuery, a resposta contém apenas um stats.

O exemplo a seguir mostra a resposta explain para uma query executada na coleção sample_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}
MultiTermQueryConstantScoreWrapper

Para consultas do Lucene MultiTermQueryConstantScoreWrapper, o resumo estruturado inclui detalhes sobre os seguintes argumentos:

Campo
Tipo
necessidade
Descrição

queries

Obrigatório

Lista de consultas.

O exemplo a seguir mostra a resposta explain para uma query executada na coleção sample_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}
PhraseQuery

Para consultas do Lucene PhraseQuery, o resumo estruturado inclui detalhes sobre os seguintes argumentos:

Campo
Tipo
necessidade
Descrição

path

String

Obrigatório

Campo indexado para pesquisar.

query

String

Obrigatório

String ou strings para pesquisar.

slop

Número

Obrigatório

Distância permitida entre palavras na frase query.

O exemplo a seguir mostra a resposta explain para uma query executada na coleção sample_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}
PointRangeQuery

Para consultas do Lucene PointRangeQuery, o resumo estruturado inclui detalhes sobre os seguintes argumentos:

Campo
Tipo
necessidade
Descrição

path

String

Obrigatório

Campo indexado para pesquisar.

representation

String

Opcional

Representação numérica. Queries sobre dados classificados por data não incluem representação.

gte

Número

Opcional

Limite inferior da consulta.

lte

Número

Opcional

Limite superior da consulta.

O exemplo a seguir mostra a resposta explain para uma query executada na coleção sample_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}
TermQuery

Para queries de termo, o resumo estruturado inclui detalhes sobre os seguintes argumentos:

Campo
Tipo
necessidade
Descrição

path

String

Obrigatório

Campo indexado para pesquisar.

value

String

Obrigatório

String a ser pesquisada.

O exemplo a seguir mostra a resposta explain para uma query executada na coleção sample_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}
Default

Queries 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:

Campo
Tipo
necessidade
Descrição

queryType

String

Obrigatório.

Tipo de consulta Lucene.

O exemplo a seguir mostra a resposta explain para uma query executada na coleção sample_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}

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.

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

millisElapsed

Long

O tempo aproximado do relógio na parede decorrido executando tarefas nessa área, incluindo a quantidade de tempo que os filhos da query gastaram nessa área. O valor é o número aproximado de milissegundos decorridos durante a execução de tarefas nesta área.

invocationCounts

Documento

Número de invocações de tarefas incluídas nesta área. O valor é um mapa de nomes de tarefas para sua contagem de invocação.

As estatísticas estão disponíveis para as seguintes áreas de query:

Opção
Descrição

context

Estatísticas relacionadas à execução da query Lucene. Há duas tarefas cujas contagens de invocação são enumeradas nesta área:

createScorer

O Scorer itera sobre os documentos e gera uma pontuação para cada documento. Invocações de createScorer criam o objeto responsável pela pontuação. Observe que o tempo associado a essa tarefa não é o tempo gasto na classificação de documentos. A contagem inclui o número de invocações scorerSupplier .

createWeight

O estado das lojas de peso associado a uma query e IndexSearcher. A contagem inclui o número de invocações createWeight .

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:

"context" : {
"millisElapsed" : NumberDouble(4.934751),
"invocationCounts" : {
"createWeight" : NumberLong(1),
"createScorer" : NumberLong(10)
}
}

match

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:

nextDoc

Solicitações para avançar para o próximo documento do conjunto de resultados. Isso envolve identificar e mover saltos anteriores, ou outras tarefas necessárias para encontrar a próxima correspondência. A contagem inclui o número de invocações nextDoc e advance .

refineRoughMatch

Executa uma correspondência mais completa. Algumas query são executadas em um processo de duas fases, em que um documento é primeiro correspondido "aproximadamente" e é verificado com uma segunda fase, mais completa, somente depois de satisfazer a primeira correspondência aproximada. A tarefa refineRoughMatch é a segunda fase do processo de duas fases. A contagem inclui o número de invocações refineRoughMatch .

Por exemplo:

"match" : {
"millisElapsed" : NumberDouble(4.901597),
"invocationCounts" : {
"nextDoc" : NumberLong(541),
"refineRoughMatch" : NumberLong(0)
}
}

score

Estatísticas relacionadas à pontuação de documentos no conjunto de resultados. Há duas tarefas cujas contagens de invocação são enumeradas nesta área:

score

Classifica cada documento no conjunto de resultados. A contagem inclui o número de invocações score .

setMinCompetitiveScore

Ignora documentos cuja pontuação é menor que o valor fornecido. Indica que uma query pode ter sido capaz de reduzir o número de operações de pontuação realizadas ignorando documentos com pontuações abaixo de um limite não concorrência. A contagem inclui o número de invocações setMinCompetitiveScore .

Por exemplo:

"score" : {
"millisElapsed" : NumberDouble(3.931312),
"invocationCounts" : {
"score" : NumberLong(536),
"setMinCompetitiveScore" : NumberLong(0)
}
}

O documento resultMaterialization mostra o tempo que mongot leva para realizar o seguinte:

  1. Recupere os dados de resultados armazenados no Lucene no formato de _id ou storedSource.

  2. Serialize os dados no formato BSON antes de enviá-los para mongod.

Para aprender mais, consulte stats.

O documento resourceUsage mostra o recurso utilizado para executar a query. Ele contém os seguintes campos:

Campo
Tipo
necessidade
Propósito

majorFaults

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.

minorFaults

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.

userTimeMs

Long

Obrigatório

Tempo da CPU, em milissegundos, gasto no espaço do usuário.

systemTimeMs

Long

Obrigatório

Tempo da CPU, em milissegundos, gasto no espaço do sistema.

maxReportingThreads

Inteiro

Obrigatório

Número máximo de threads que mongot utilizou durante a execução da query em todos os lotes. Para consultas de explicação não concorrentes, o valor é 1.

numBatches

Inteiro

Obrigatório

Número total de lotes que mongot foi solicitado ao processar a query.

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.

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}

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>,
}

O exemplo a seguir usa o autocomplete para consultar o campo title com o modo de detalhamento executionStats.

1db.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.

Nesta página