📖 Scenario: You are managing a MongoDB database for a web application that stores temporary user session data. To keep the database clean and efficient, you want to automatically remove session documents after a certain time.
🎯 Goal: Build a MongoDB collection with a TTL index that automatically deletes session documents 3600 seconds (1 hour) after their creation.
📋 What You'll Learn
Create a collection named sessions with documents containing a createdAt field of type Date.
Add a TTL index on the createdAt field with an expiration time of 3600 seconds.
Insert a sample session document with the current date and time in createdAt.
Verify the TTL index is created correctly.
💡 Why This Matters
🌍 Real World
TTL indexes help automatically clean up temporary data like sessions, logs, or cache entries in databases, keeping storage efficient.
💼 Career
Understanding TTL indexes is useful for database administrators and backend developers managing data lifecycle and storage optimization.
Progress0 / 4 steps
1
Create the sessions collection and insert a session document
Create a collection called sessions and insert one document with a createdAt field set to the current date and time using new Date().
MongoDB
Hint
Use db.sessions.insertOne({ createdAt: new Date() }) to insert the document.
2
Define the TTL index expiration time
Create a variable called expireAfterSeconds and set it to 3600 to represent the expiration time in seconds.
MongoDB
Hint
Use const expireAfterSeconds = 3600 to set the expiration time.
3
Create the TTL index on createdAt
Use db.sessions.createIndex to create a TTL index on the createdAt field with the option { expireAfterSeconds: expireAfterSeconds }.
MongoDB
Hint
Use db.sessions.createIndex({ createdAt: 1 }, { expireAfterSeconds: expireAfterSeconds }) to create the TTL index.
4
Verify the TTL index creation
Use db.sessions.getIndexes() to list all indexes on the sessions collection and confirm the TTL index exists.
MongoDB
Hint
Use db.sessions.getIndexes() to see all indexes on the collection.
Practice
(1/5)
1. What is the main purpose of a TTL index in MongoDB?
easy
A. Automatically delete documents after a specified time
B. Encrypt documents for security
C. Create backups of collections
D. Improve query speed by sorting data
Solution
Step 1: Understand TTL index function
A TTL index is designed to remove documents automatically after a certain time period.
Step 2: Compare options with TTL purpose
Only Automatically delete documents after a specified time describes automatic deletion after time, which matches TTL index behavior.
Final Answer:
Automatically delete documents after a specified time -> Option A
Quick Check:
TTL index = auto-delete documents [OK]
Hint: TTL means auto-delete documents after time [OK]
Common Mistakes:
Thinking TTL encrypts data
Confusing TTL with backup or sorting
Assuming TTL speeds up queries
2. Which of the following is the correct way to create a TTL index on a field named createdAt that expires documents after 3600 seconds?
easy
A. db.collection.createIndex({ createdAt: 1 }, { expireAfterSeconds: 3600 })
B. db.collection.createIndex({ createdAt: 1 }, { ttl: 3600 })
C. db.collection.createTTLIndex({ createdAt: 1 }, 3600)
D. db.collection.createIndex({ createdAt: 1 }, { expireAfter: 3600 })
Solution
Step 1: Recall correct TTL index syntax
The correct syntax uses createIndex with the option expireAfterSeconds set to the expiry time in seconds.
Step 2: Match options with correct syntax
Only db.collection.createIndex({ createdAt: 1 }, { expireAfterSeconds: 3600 }) uses createIndex and expireAfterSeconds correctly.
Hint: Use expireAfterSeconds option in createIndex [OK]
Common Mistakes:
Using wrong option names like ttl or expireAfter
Using non-existent createTTLIndex method
Forgetting to specify expireAfterSeconds
3. Given a collection with documents having a timestamp field and a TTL index created as db.logs.createIndex({ timestamp: 1 }, { expireAfterSeconds: 120 }), what happens to a document inserted with { timestamp: new Date() } after 3 minutes?
medium
A. The document remains indefinitely
B. The document is automatically deleted
C. The document is archived but not deleted
D. The document causes an error on insertion
Solution
Step 1: Understand TTL expiry timing
The TTL index deletes documents after expireAfterSeconds from the timestamp field value.
Step 2: Calculate expiry for 3 minutes
3 minutes = 180 seconds, which is more than 120 seconds, so the document will be deleted.
Final Answer:
The document is automatically deleted -> Option B
Quick Check:
TTL expiry after 120s means deletion after 3 minutes [OK]
Hint: TTL deletes after expireAfterSeconds from date field [OK]
Common Mistakes:
Thinking document stays forever
Assuming TTL archives instead of deletes
Believing TTL causes insertion errors
4. You created a TTL index with expireAfterSeconds: 0 on a field expireAt, but documents are not being deleted. What is the likely cause?
medium
A. TTL indexes only work on _id field
B. expireAfterSeconds cannot be zero
C. You must restart MongoDB for TTL to work
D. The expireAt field is not a date type
Solution
Step 1: Check TTL index requirements
TTL indexes require the indexed field to be a date type to calculate expiry.
Step 2: Analyze why documents not deleted
If expireAt is not a date, TTL cannot determine expiry time, so documents stay.
Final Answer:
The expireAt field is not a date type -> Option D
Quick Check:
TTL needs date field type to delete documents [OK]
Hint: Ensure TTL field is a date type [OK]
Common Mistakes:
Thinking expireAfterSeconds cannot be zero
Believing TTL only works on _id
Assuming MongoDB restart is needed
5. You want documents in a collection to expire exactly at a specific date and time stored in the expireAt field. Which TTL index configuration achieves this?
hard
A. Create TTL index on createdAt with expireAfterSeconds set to document age
B. Create TTL index on expireAt with expireAfterSeconds: 3600
C. Create TTL index on expireAt with expireAfterSeconds: 0
D. Use a background job to delete documents at expireAt
Solution
Step 1: Understand TTL with exact expiry date
Setting expireAfterSeconds to 0 means documents expire exactly at the date/time in the field.
Step 2: Compare options for exact expiry
Only Create TTL index on expireAt with expireAfterSeconds: 0 uses expireAfterSeconds: 0 on expireAt field to expire exactly at that time.
Final Answer:
Create TTL index on expireAt with expireAfterSeconds: 0 -> Option C
Quick Check:
expireAfterSeconds: 0 = expire exactly at date field [OK]
Hint: Use expireAfterSeconds: 0 for exact expiry date [OK]
Common Mistakes:
Using non-zero expireAfterSeconds for exact expiry
Confusing createdAt with expireAt field
Relying on manual background jobs unnecessarily
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.