codingstuff.io
ExploreTutorialsProblemsCS Subjects
Get Started
ExploreTutorialsProblemsCS Subjects
Get Started
codingstuff.io

Master the art of building software through interactive tutorials, real-world problems, and guided projects.

Pune, Maharashtra, India

codingstuffmail@gmail.com

Product

  • Explore
  • Tutorials
  • Problems
  • CS Subjects

Company

  • About
  • Contact
  • Privacy Policy
  • Terms & Conditions
  • Sitemap

© 2026 codingstuff.io. All rights reserved.

Built with ❤️ for developers everywhere

/
/
All Tutorials
🍃

MongoDB

24 / 65 topics
19Indexing Basics20Creating Indexes21Compound Indexes22Unique Indexes23Geospatial Indexes24Explain Command
Tutorials/MongoDB/Explain Command
🍃MongoDB

Explain Command

Updated 2026-04-20
4 min read

Introduction

In MongoDB, optimizing query performance is crucial for ensuring that your applications run efficiently and responsively. One of the most powerful tools at your disposal for understanding and improving query performance is the explain() command. This tutorial will provide a comprehensive guide to using the explain() command in MongoDB, including its syntax, usage, and best practices.

What is the Explain Command?

The explain() method provides information on how MongoDB executes queries. It helps you understand the execution plan that MongoDB uses to retrieve data from your collections. By analyzing this information, you can identify potential performance bottlenecks and optimize your queries accordingly.

Basic Syntax

The basic syntax for using the explain() command is as follows:

db.collection.find(query).explain([verbosity])
  • query: The query document that specifies the criteria for selecting documents.
  • verbosity: Optional parameter that controls the level of detail in the explanation. It can take one of the following values:
    • "queryPlanner": Provides information on how MongoDB selects the query plan.
    • "executionStats": Includes statistics about the execution of the query, such as the number of documents scanned and returned.
    • "allPlansExecution": Executes all possible plans and provides detailed statistics for each.

Understanding the Output

The explain() command returns a document that describes the query execution plan. The structure of this document can vary depending on the verbosity level specified. Below is an example output when using the "executionStats" verbosity:

{
  "queryPlanner": {
    "plannerVersion": 1,
    "namespace": "database.collection",
    "indexFilterSet": false,
    "parsedQuery": { "field": { "$gt": 10 } },
    "winningPlan": {
      "stage": "FETCH",
      "inputStage": {
        "stage": "IXSCAN",
        "keyPattern": { "field": 1 },
        "indexName": "fieldName_1",
        "isMultiKey": false,
        "multiKeyPaths": {},
        "isUnique": false,
        "isSparse": false,
        "isPartial": false,
        "indexVersion": 2,
        "direction": "forward",
        "indexBounds": { "field": [ "[10, inf.0]" ] }
      }
    },
    "rejectedPlans": []
  },
  "executionStats": {
    "executionSuccess": true,
    "nReturned": 5,
    "executionTimeMillis": 2,
    "totalKeysExamined": 6,
    "totalDocsExamined": 5,
    "executionStages": {
      "stage": "FETCH",
      "nReturned": 5,
      "executionTimeMillisEstimate": 0,
      "works": 7,
      "advanced": 5,
      "needTime": 1,
      "needYield": 0,
      "saveState": 0,
      "restoreState": 0,
      "isEOF": 1,
      "invalidates": 0,
      "docsExamined": 5,
      "alreadyHasObj": 0,
      "inputStage": {
        "stage": "IXSCAN",
        "nReturned": 5,
        "executionTimeMillisEstimate": 0,
        "works": 7,
        "advanced": 5,
        "needTime": 1,
        "needYield": 0,
        "saveState": 0,
        "restoreState": 0,
        "isEOF": 1,
        "invalidates": 0,
        "keyPattern": { "field": 1 },
        "indexName": "fieldName_1",
        "isMultiKey": false,
        "multiKeyPaths": {},
        "isUnique": false,
        "isSparse": false,
        "isPartial": false,
        "indexVersion": 2,
        "direction": "forward",
        "indexBounds": { "field": [ "[10, inf.0]" ] },
        "keysExamined": 6,
        "seeks": 1,
        "dupsTested": 5,
        "dupsDropped": 0,
        "seenInvalidated": 0
      }
    }
  },
  "serverInfo": {
    "host": "hostname",
    "port": 27017,
    "version": "4.4.6",
    "gitVersion": "c55d9e3a0b8c0f8b0e1b1e1b1e1b1e1b1e1b1e1b"
  },
  "ok": 1
}

Key Fields in the Output

  • queryPlanner: Contains information about the query planner's decision-making process.

    • winningPlan: The plan that MongoDB selected to execute the query.
    • rejectedPlans: Plans that were considered but rejected by the query planner.
  • executionStats: Provides detailed statistics about the execution of the query.

    • nReturned: Number of documents returned by the query.
    • executionTimeMillis: Total time taken to execute the query in milliseconds.
    • totalKeysExamined: Number of index keys examined during the query execution.
    • totalDocsExamined: Number of documents examined during the query execution.
  • serverInfo: Contains information about the MongoDB server, such as host, port, and version.

Common Use Cases

Analyzing Query Performance

To analyze the performance of a query, use the explain("executionStats") verbosity:

db.collection.find({ field: { $gt: 10 } }).explain("executionStats")

This will provide detailed statistics about how the query was executed, including the number of documents and keys examined.

Identifying Index Usage

To determine if a query is using an index, use the explain("queryPlanner") verbosity:

db.collection.find({ field: { $gt: 10 } }).explain("queryPlanner")

Look for the "winningPlan" section to see which index MongoDB selected.

Comparing Execution Plans

To compare multiple execution plans, use the explain("allPlansExecution") verbosity:

db.collection.find({ field: { $gt: 10 } }).explain("allPlansExecution")

This will execute all possible plans and provide detailed statistics for each, allowing you to choose the most efficient one.

Best Practices

Use Indexes Appropriately

Ensure that your queries are using indexes effectively. The explain() command can help identify whether a query is using an index or not. If a query is not using an index, consider creating an appropriate index.

Monitor and Optimize Queries Regularly

Regularly use the explain() command to monitor query performance and optimize them as needed. This is especially important for applications with high read/write volumes.

Understand the Query Planner's Decision-Making Process

The query planner makes decisions based on various factors, such as the size of the collection, the selectivity of the query, and the available indexes. Understanding these factors can help you design more efficient queries and indexes.

Use the Appropriate Verbosity Level

Choose the appropriate verbosity level for your needs:

  • "queryPlanner": For understanding index selection.
  • "executionStats": For detailed performance analysis.
  • "allPlansExecution": For comparing multiple execution plans.

Real-World Example

Consider a scenario where you have a collection of user documents with fields name, age, and email. You frequently query this collection to find users by age. To optimize these queries, you can create an index on the age field:

db.users.createIndex({ age: 1 })

Now, use the explain() command to analyze a query that retrieves users older than 30:

db.users.find({ age: { $gt: 30 } }).explain("executionStats")

The output will show whether the index is being used and provide statistics on the number of documents and keys examined. Based on this information, you can further optimize your queries or indexes.

Conclusion

The explain() command is a powerful tool for understanding and optimizing query performance in MongoDB. By analyzing the execution plan and statistics provided by explain(), you can identify potential bottlenecks and improve the efficiency of your queries. Regularly using explain() can help ensure that your MongoDB applications run smoothly and efficiently, providing a better user experience.

Additional Resources

  • MongoDB Documentation on explain()
  • Indexing Best Practices in MongoDB
  • Query Optimization with MongoDB's Explain Command

PreviousGeospatial IndexesNext Sharding Basics

Recommended Gear

Geospatial IndexesSharding Basics