Você pode usar a explicação dos resultados para determinar as seguintes informações sobre uma query:
O tempo que uma query levou para ser concluída
Se a query usou um índice
O número de documentos e chaves de índice verificados para atender a uma query
Observação
Os resultados do plano de explicação para queries estão sujeitos a alterações entre as versões MongoDB.
Os métodos cursor.explain("executionStats") e db.collection.explain("executionStats") fornecem estatísticas sobre o desempenho de uma query. Essas estatísticas podem ser úteis para medir se e como uma query utiliza um índice. Consulte db.collection.explain() para obter detalhes.
O MongoDB Compass fornece um modal Plano de explicação, que exibe estatísticas sobre o desempenho de uma query. Essas estatísticas podem ser úteis para medir se e como uma query utiliza um índice.
Avalie o desempenho de uma query
Os exemplos nesta página usam dados do conjunto de dados sample_mflix. Para obter detalhes sobre como carregar este conjunto de dados em sua implantação do MongoDB autogerenciado, consulte Carregar o conjunto de dados de amostra. Se você fez alguma modificação nos bancos de dados de amostra, talvez seja necessário descartar e recriar os bancos de dados para executar os exemplos nesta página.
Os exemplos nesta página usam dados do conjunto de dados de amostra sample_mflix. Para obter detalhes sobre como carregar este conjunto de dados em sua implantação, consulte Importar dados de amostra em sua implantação do Atlas.
Após carregar o conjunto de dados, conecte o MongoDB Compass à mesma implantação e abra a coleção movies.
Os documentos da coleção aparecem no MongoDB Compass da seguinte forma:

Consulta sem Índice
A query a seguir recupera documentos em que o campo
year tem um valor entre 2000 e 2005,
inclusive:
db.movies.find( { year: { $gte: 2000, $lte: 2005 } } )Esta query corresponde a 3809 dos 21349 documento na coleção.
Para exibir o plano de query selecionado, encadeie o método cursor.explain("executionStats") cursor até o final do comando find:
db.movies.find( { year: { $gte: 2000, $lte: 2005 } }).explain("executionStats"){ queryPlanner: { namespace: 'sample_mflix.movies', winningPlan: { stage: 'COLLSCAN', '...': '...' }, '...': '...' }, executionStats: { executionSuccess: true, nReturned: 3809, totalKeysExamined: 0, totalDocsExamined: 21349, executionStages: { stage: 'COLLSCAN', '...': '...' }, '...': '...' }, '...': '...'}queryPlanner.winningPlan.stageexibeCOLLSCANpara indicar uma verificação de collection.As verificações de collection indicam que
mongodprecisou verificar documento por documento de toda a collection para identificar os resultados. Essa é uma operação geralmente cara e pode resultar em queries lentas.executionStats.nReturnedexibe3809para indicar que o plano de query vencedor retorna 3,809 documento.executionStats.totalKeysExaminedexibe0para indicar que esta query não está usando um índice.executionStats.totalDocsExaminedexibe21349para indicar que o MongoDB teve que verificar 21,349 documentos na coleção para encontrar os 3,809 documentos correspondentes.
A query a seguir recupera documentos em que o campo
year tem um valor entre 2000 e 2005,
inclusive:
Copie o seguinte filtro na barra de consulta do Compass e clique em Find:
{ year: { $gte: 2000, $lte: 2005 } }Esta query corresponde a 3809 dos 21349 documento na coleção.
Para visualizar o plano de query, clique em Explain na barra de query.
O MongoDB Compass exibe o plano de query da seguinte maneira:

Árvore visual
O Query Performance Summary mostra as estatísticas de execução da consulta:
Documents Returned exibe
3809para indicar que o plano de query vencedor retorna 3,809 documento.Documents Examined exibe
21349para indicar que o MongoDB teve que verificar todos os 21,349 documentos na coleção para encontrar os 3,809 documentos correspondentes.Index Keys Examined exibe
0para indicar que essa query não está usando um índice.
O MongoDB Compass exibe o estágio de consulta
COLLSCANpara indicar que uma varredura de coleção foi usada para esta consulta. As varreduras de coleção indicam quemongodprecisou verificar documento por documento de toda a coleção para identificar os resultados. Essa é uma operação geralmente cara e pode resultar em queries lentas.
Raw JSON
Os detalhes de Explain Plan também podem ser visualizados no formato JSON bruto clicando na opção Raw Output:

A diferença entre o número de documentos correspondentes e o número de documentos examinados pode sugerir que a query pode se beneficiar do uso de um índice para melhorar a eficiência.
Consulta com índice
Para suportar a query no campo year, adicione um índice no campo year:
db.movies.createIndex( { year: 1 } )Para visualizar as estatísticas do plano de query, use o método explain() :
db.movies.find( { year: { $gte: 2000, $lte: 2005 } }).explain("executionStats"){ queryPlanner: { namespace: 'sample_mflix.movies', winningPlan: { stage: 'FETCH', inputStage: { stage: 'IXSCAN', keyPattern: { year: 1 }, '...': '...' }, '...': '...' }, '...': '...' }, executionStats: { executionSuccess: true, nReturned: 3809, totalKeysExamined: 3809, totalDocsExamined: 3809, '...': '...' }, '...': '...'}queryPlanner.winningPlan.inputStage.stageexibeIXSCANpara indicar o uso do índice.executionStats.nReturnedexibe3809para indicar que o plano de query vencedor retorna 3,809 documento.executionStats.totalKeysExaminedexibe3809para indicar que o MongoDB verificou 3,809 entradas de índice. O número de chaves examinadas corresponde ao número de documentos retornados, o que significa quemongodsó precisou examinar as chaves do índice para retornar os resultados. Omongodnão precisou digitalizar todos os documentos, e apenas os 3,809 documentos correspondentes tiveram que ser colocados na memória. Isso resulta em uma query muito eficiente.executionStats.totalDocsExaminedexibe3809para indicar que o MongoDB digitalizou 3,809 documento.
Para suportar a query no campo year, adicione um índice no campo year:
Clique Indexes na guia
sample_mflix.moviescollection.Clique em Create e, em seguida, selecione Index no menu suspenso.
Selecione
yearno menu suspenso Select or type a field name.Selecione
1 (asc)no menu suspenso Select a type.Clique em Create Index.
Observação
Deixar o campo do nome do índice em branco faz com que o MongoDB Compass crie um nome padrão para o índice.
Agora você pode ver o índice recém-criado na guia Indexes:

Retorne à aba Documents para a coleção sample_mflix.movies e execute novamente a query da etapa anterior:
{ year: { $gte: 2000, $lte: 2005 } }Abra o modal Explain Plan. O MongoDB Compass exibe o plano de query da seguinte maneira:

Árvore visual
O Query Performance Summary mostra as estatísticas de execução da consulta:
Documents Returned exibe
3809para indicar que o plano de query vencedor retorna 3,809 documento.Documents Examined exibe
3809para indicar que o MongoDB verificou 3,809 documentos.Index Keys Examined exibe
3809para indicar que o MongoDB verificou 3,809 entradas de índice. O número de chaves examinadas corresponde ao número de documentos retornados, o que significa que omongodsó precisou examinar as chaves do índice para retornar os resultados. Omongodnão precisou digitalizar todos os documentos, e apenas os 3,809 documentos correspondentes tiveram que ser colocados na memória. Isso resulta em uma query muito eficiente.Na parte inferior do Query Performance Summary, o MongoDB Compass mostra que a query usou o índice
year.
À esquerda do Query Performance Summary, o MongoDB Compass exibe os estágios de consulta
FETCHeIXSCAN.IXSCANindica que omongodusou um índice para satisfazer a consulta antes de executar o estágioFETCHe recuperar os documentos.
Raw JSON
Os detalhes explicativos também podem ser visualizados no formato JSON bruto clicando na opção Raw Output:

Sem o índice, a query verifica toda a coleção para retornar os documentos correspondentes. A query também precisa verificar a totalidade de cada documento, potencialmente colocando-os na memória. Isso resulta em uma operação de query cara e potencialmente lenta.
Ao executar com um índice, a query verifica apenas o número de entradas de índice e documentos que retorna, resultando em uma query mais eficiente.
Comparar Desempenho dos Índices
Para comparar manualmente o desempenho de uma consulta usando mais de um índice, você pode usar o método em hint() explain() conjunto com o método.
Considere a seguinte query:
db.movies.find( { year: { $gte: 2000, $lte: 2005 }, rated: "PG"} )Esta query corresponde a 235 documentos.
Para dar suporte à consulta, adicione um índice composto. Com índices compostos, a ordem dos campos é importante.
Por exemplo, adicione os dois índices compostos a seguir. O primeiro índice ordena primeiro pelo campo year e depois pelo campo rated. O segundo índice ordena primeiro por rated e, em seguida, pelo campo year.
db.movies.createIndex( { year: 1, rated: 1 } )db.movies.createIndex( { rated: 1, year: 1 } )Avalie o efeito do primeiro índice na query:
db.movies.find( { year: { $gte: 2000, $lte: 2005 }, rated: "PG" }).hint( { year: 1, rated: 1 } ).explain("executionStats"){ queryPlanner: { namespace: 'sample_mflix.movies', winningPlan: { stage: 'FETCH', inputStage: { stage: 'IXSCAN', keyPattern: { year: 1, rated: 1 }, '...': '...' }, '...': '...' }, '...': '...' }, executionStats: { executionSuccess: true, nReturned: 235, totalKeysExamined: 246, totalDocsExamined: 235, '...': '...' }, '...': '...'}O MongoDB escaneou 246 chaves de índice (executionStats.totalKeysExamined) para retornar 235 documentos correspondentes (executionStats.nReturned).
Avalie o efeito do segundo índice na query:
db.movies.find( { year: { $gte: 2000, $lte: 2005 }, rated: "PG" }).hint( { rated: 1, year: 1 } ).explain("executionStats"){ queryPlanner: { namespace: 'sample_mflix.movies', winningPlan: { stage: 'FETCH', inputStage: { stage: 'IXSCAN', keyPattern: { rated: 1, year: 1 }, '...': '...' }, '...': '...' }, '...': '...' }, executionStats: { executionSuccess: true, nReturned: 235, totalKeysExamined: 235, totalDocsExamined: 235, '...': '...' }, '...': '...'}O MongoDB escaneou 235 chaves de índice (executionStats.totalKeysExamined) para retornar 235 documentos correspondentes (executionStats.nReturned).
O segundo índice composto, { rated: 1, year: 1 }, é, portanto, o índice mais eficiente para dar suporte à query de exemplo, pois o servidor MongoDB só precisa escanear 235 index keys para encontrar todos os documento correspondentes usando esse índice, em comparação com 246 ao usar o índice composto { year: 1, rated: 1 }.