Pretty printing helps you read database results easily by formatting them nicely. Cursor behavior controls how you get and move through query results step-by-step.
Pretty printing and cursor behavior in MongoDB
Start learning this pattern below
Jump into concepts and practice - no test required
or
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction
Syntax
MongoDB
db.collection.find(query).pretty() // Cursor methods examples: cursor.hasNext() cursor.next() cursor.forEach(function(doc) { /* process doc */ })
pretty() formats the output for easier reading in the shell.
Cursors let you move through results one at a time or in batches.
Examples
users collection with nice formatting.MongoDB
db.users.find().pretty()
MongoDB
var cursor = db.orders.find({status: 'pending'}) while (cursor.hasNext()) { printjson(cursor.next()) }
MongoDB
db.products.find().limit(3).pretty()Sample Program
This inserts three books into the books collection, then uses a cursor to print each book nicely formatted.
MongoDB
db.books.insertMany([
{title: 'Book A', author: 'Author 1', year: 2020},
{title: 'Book B', author: 'Author 2', year: 2019},
{title: 'Book C', author: 'Author 3', year: 2021}
])
var cursor = db.books.find()
while (cursor.hasNext()) {
printjson(cursor.next())
}Important Notes
Pretty printing only works in the MongoDB shell or compatible tools.
Cursors help manage large result sets without loading everything at once.
Use limit() to control how many results you get.
Summary
Pretty printing makes query results easier to read.
Cursors let you move through query results step-by-step.
Use cursor methods like hasNext() and next() to process data efficiently.
Practice
1. What does the
pretty() method do when used after a MongoDB query?easy
Solution
Step 1: Understand the purpose of
Thepretty()pretty()method formats the output of a query to make it easier to read by adding indentation and line breaks.Step 2: Compare with other options
Limiting, sorting, or deleting documents are done by other methods likelimit(),sort(), orremove(), notpretty().Final Answer:
Formats the output to be more readable with indentation and line breaks -> Option AQuick Check:
pretty()improves readability [OK]
Hint: Remember: pretty() just makes output look nicer [OK]
Common Mistakes:
- Confusing pretty() with limit() or sort()
- Thinking pretty() changes the data
- Assuming pretty() affects query results count
2. Which of the following is the correct syntax to check if a MongoDB cursor has more documents to iterate?
easy
Solution
Step 1: Recall cursor methods in MongoDB
The correct method to check if a cursor has more documents ishasNext().Step 2: Verify other options
Methods likehasMore(),nextExists(), ormore()do not exist in MongoDB cursor API.Final Answer:
cursor.hasNext() -> Option BQuick Check:
Use hasNext() to check cursor availability [OK]
Hint: Use hasNext() to check cursor's next document [OK]
Common Mistakes:
- Using non-existent cursor methods
- Confusing hasNext() with next()
- Assuming hasNext() returns the document itself
3. Given the following MongoDB shell commands, what will be the output?
var cursor = db.users.find({age: {$gt: 25}}).pretty();
while(cursor.hasNext()) {
printjson(cursor.next());
}medium
Solution
Step 1: Analyze the query and cursor usage
The query finds users with age > 25 and applies pretty() to format output. The while loop uses hasNext() and next() to print each document.Step 2: Understand the output behavior
Each matching document is printed in readable JSON format until no documents remain.Final Answer:
All user documents with age greater than 25 printed in readable JSON format -> Option CQuick Check:
Cursor iterates all matching docs with pretty print [OK]
Hint: pretty() formats output; hasNext() and next() iterate all [OK]
Common Mistakes:
- Thinking pretty() breaks chaining
- Assuming only one document prints
- Forgetting to call next() as a function
4. You run this code in MongoDB shell:
var cursor = db.products.find().pretty();
if(cursor.hasNext) {
printjson(cursor.next());
}
What is the problem with this code?medium
Solution
Step 1: Identify method usage errors
The methodhasNextis used without parentheses, so it refers to the function itself, not its boolean result.Step 2: Understand impact on code behavior
BecausehasNextis not called, the if condition always evaluates to true (function exists), causing unexpected behavior.Final Answer:
hasNext is used without parentheses, so it does not check correctly -> Option AQuick Check:
Always call hasNext() with parentheses [OK]
Hint: Call hasNext() with () to get boolean result [OK]
Common Mistakes:
- Using hasNext without parentheses
- Thinking pretty() causes error
- Calling next() before checking hasNext()
5. You want to print all documents from the
orders collection where status is "shipped" in a readable format, but only 3 at a time to avoid memory overload. Which code snippet correctly achieves this?hard
Solution
Step 1: Limit query results to 3 documents
Usinglimit(3)restricts the cursor to only 3 documents matching the filter.Step 2: Use pretty() to format output and iterate with hasNext()/next()
Chainingpretty()formats output. The while loop prints each document until the 3 limited documents are exhausted.Final Answer:
var cursor = db.orders.find({status: "shipped"}).limit(3).pretty(); while(cursor.hasNext()) { printjson(cursor.next()); } -> Option DQuick Check:
limit(3) + pretty() + hasNext()/next() prints 3 formatted docs [OK]
Hint: Use limit(3) before pretty() and iterate with hasNext()/next() [OK]
Common Mistakes:
- Not using limit() to restrict documents
- Calling pretty() after iteration instead of chaining
- Incorrect loop control causing infinite or missing output
