Indexes help MongoDB find data faster by creating a quick lookup for fields, similar to an index in a book.
Click to reveal answer
beginner
Which MongoDB command shows how a query uses indexes?
The explain() method shows details about how MongoDB executes a query and which indexes it uses.
Click to reveal answer
intermediate
What does the winningPlan field in explain() output indicate?
It shows the best plan MongoDB chose to run the query, including which index it used if any.
Click to reveal answer
intermediate
How can you verify if a query is using a collection scan instead of an index?
If explain() shows COLLSCAN in the stage, it means MongoDB scanned the whole collection without using an index.
Click to reveal answer
advanced
Why might MongoDB choose not to use an index even if one exists?
MongoDB may skip an index if it thinks scanning the whole collection is faster, for example if the query returns many documents.
Click to reveal answer
Which MongoDB method helps you check if a query uses an index?
Aexplain()
BfindIndex()
CshowIndexes()
DlistIndexes()
✗ Incorrect
The explain() method shows how MongoDB runs a query and which indexes it uses.
What does a COLLSCAN stage in explain() output mean?
AQuery used a cached result
BQuery used an index
CQuery failed
DQuery scanned the entire collection
✗ Incorrect
COLLSCAN means MongoDB scanned all documents without using an index.
If a query returns many documents, MongoDB might:
AAlways use an index
BThrow an error
CSkip the index and scan the collection
DCreate a new index automatically
✗ Incorrect
MongoDB may skip indexes if scanning the collection is faster for large result sets.
Which field in explain() output shows the chosen query plan?
AqueryPlanner.winningPlan
BexecutionStats.totalDocsExamined
CserverStatus
DindexStats
✗ Incorrect
queryPlanner.winningPlan shows the plan MongoDB picked to run the query.
To see all indexes on a MongoDB collection, you use:
Adb.collection.getIndexes()
Bdb.collection.listIndexes()
Cdb.collection.showIndexes()
Ddb.collection.explain()
✗ Incorrect
listIndexes() lists all indexes on a collection.
Explain how to verify if a MongoDB query uses an index and what to look for in the explain output.
Think about the query plan and stages shown by explain()
You got /4 concepts.
Describe why MongoDB might choose not to use an index even if one exists for a query.
Consider query performance and optimizer decisions
You got /4 concepts.
Practice
(1/5)
1. What does the IXSCAN stage in MongoDB's explain('executionStats') output indicate?
easy
A. The query is updating documents.
B. The query is scanning all documents without an index.
C. The query is using an index to find documents.
D. The query has a syntax error.
Solution
Step 1: Understand the meaning of IXSCAN
The IXSCAN stage means MongoDB is scanning an index to find matching documents.
Step 2: Compare with other stages
If the query was scanning all documents, it would show a COLLSCAN stage instead.
Final Answer:
The query is using an index to find documents. -> Option C
Quick Check:
IXSCAN = index used [OK]
Hint: Look for IXSCAN in explain output to confirm index use [OK]
Common Mistakes:
Confusing IXSCAN with COLLSCAN
Assuming IXSCAN means a full collection scan
Thinking IXSCAN means query error
2. Which of the following is the correct way to run an explain plan with execution stats for a MongoDB query on collection users?
easy
A. db.users.find({age: 25}).explain()
B. db.users.find({age: 25}).explain('executionStats')
C. db.users.explain('executionStats').find({age: 25})
D. db.users.find().explain('stats')
Solution
Step 1: Recall the correct syntax for explain
The correct syntax is to call explain('executionStats') on the cursor returned by find().
Step 2: Check each option
db.users.find({age: 25}).explain('executionStats') correctly calls find() then explain('executionStats'). db.users.explain('executionStats').find({age: 25}) calls explain before find, which is invalid. db.users.find({age: 25}).explain() calls explain without argument, which defaults to 'queryPlanner' not 'executionStats'. db.users.find().explain('stats') uses wrong argument 'stats'.
Final Answer:
db.users.find({age: 25}).explain('executionStats') -> Option B
Quick Check:
find().explain('executionStats') correct [OK]
Hint: Call explain on the find() cursor with 'executionStats' argument [OK]
Common Mistakes:
Calling explain before find()
Using wrong explain argument
Omitting parentheses on find()
3. Given the index on { username: 1 } exists, what will the explain('executionStats') output stage be for this query?
The query filters on username, and an index on { username: 1 } exists, so MongoDB can use this index.
Step 2: Identify the explain stage for index use
When an index is used, the explain output shows IXSCAN stage indicating index scan.
Final Answer:
IXSCAN -> Option A
Quick Check:
Index on username = IXSCAN [OK]
Hint: If query matches indexed field, expect IXSCAN stage [OK]
Common Mistakes:
Expecting COLLSCAN despite index presence
Confusing FETCH with index scan
Assuming SORT appears without sort query
4. You run db.orders.find({status: 'shipped'}).explain('executionStats') but see COLLSCAN instead of IXSCAN. What is the most likely cause?
medium
A. The query syntax is incorrect.
B. The collection is empty.
C. MongoDB does not support indexes on string fields.
D. There is no index on the status field.
Solution
Step 1: Understand COLLSCAN meaning
COLLSCAN means MongoDB scanned all documents because no suitable index was found.
Step 2: Identify cause for no index use
If the query filters on status but no index exists on that field, MongoDB must scan the whole collection.
Final Answer:
There is no index on the status field. -> Option D
Quick Check:
COLLSCAN = no index on query field [OK]
Hint: COLLSCAN means no index matches query filter [OK]
Common Mistakes:
Assuming syntax error causes COLLSCAN
Believing MongoDB can't index strings
Thinking empty collection causes COLLSCAN
5. You have a compound index on { category: 1, price: -1 }. Which query will use this index efficiently according to explain('executionStats')?
hard
A. db.products.find({category: 'books', price: 20}).sort({price: -1})
B. db.products.find({price: {$lt: 20}})
C. db.products.find({category: 'books'}).sort({price: 1})
D. db.products.find({category: 'books', price: {$lt: 20}})
Solution
Step 1: Understand compound index usage
A compound index on { category: 1, price: -1 } can be used efficiently if the query filters on category first, then optionally on price, and the sort matches the index order.
Step 2: Analyze each query
db.products.find({category: 'books', price: 20}).sort({price: -1}) filters on both category and price with equality and sorts price descending, matching the index order, so it uses the index efficiently. db.products.find({price: {$lt: 20}}) filters only on price, which is the second field, so index is not used efficiently. db.products.find({category: 'books'}).sort({price: 1}) sorts price ascending but index has price descending, so sort won't use index efficiently. db.products.find({category: 'books', price: {$lt: 20}}) filters on both but does not specify sort matching index order, so less efficient than A.
Final Answer:
db.products.find({category: 'books', price: 20}).sort({price: -1}) -> Option A
Quick Check:
Compound index needs prefix field filter and matching sort order [OK]
Hint: Filter on first index field and match sort order to use compound index efficiently [OK]
Common Mistakes:
Filtering only on second index field
Ignoring sort direction in compound index
Assuming any filter uses compound index fully
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.