Creating Indexes in MongoDB with createIndex Method
📖 Scenario: You are managing a small online bookstore database. To make searching for books faster, you want to create an index on the title field of the books collection.
🎯 Goal: Learn how to create an index on the title field in the books collection using the createIndex method in MongoDB.
📋 What You'll Learn
Create a books collection with sample book documents.
Define an index key for the title field.
Use the createIndex method to create the index on the title field.
Add an option to make the index unique.
💡 Why This Matters
🌍 Real World
Indexes speed up searches in large databases, making websites and apps faster and more responsive.
💼 Career
Database administrators and backend developers often create indexes to optimize query performance and ensure data integrity.
Progress0 / 4 steps
1
Create the books collection with sample documents
Create a books collection and insert these exact documents: { title: "The Hobbit", author: "J.R.R. Tolkien", year: 1937 }, { title: "1984", author: "George Orwell", year: 1949 }, and { title: "To Kill a Mockingbird", author: "Harper Lee", year: 1960 }.
MongoDB
Hint
Use db.books.insertMany([...]) to add multiple documents at once.
2
Define the index key for the title field
Create a variable called indexKey and set it to an object with the title field set to 1 to indicate ascending order indexing.
MongoDB
Hint
Use { title: 1 } to create an ascending index on the title field.
3
Use createIndex to create the index on the title field
Call db.books.createIndex with the indexKey variable to create the index on the title field.
MongoDB
Hint
Use db.books.createIndex(indexKey) to create the index.
4
Add the unique option to the index
Modify the createIndex call to include an options object with unique: true to ensure no two books have the same title.
MongoDB
Hint
Pass { unique: true } as the second argument to createIndex.
Practice
(1/5)
1. What is the main purpose of the createIndex method in MongoDB?
easy
A. To speed up queries by creating an index on a field
B. To delete documents from a collection
C. To update multiple documents at once
D. To create a new collection
Solution
Step 1: Understand what createIndex does
The createIndex method organizes data to make searches faster.
Step 2: Identify the correct purpose
It does not delete or update documents, nor create collections, only speeds up queries.
Final Answer:
To speed up queries by creating an index on a field -> Option A
Quick Check:
createIndex speeds up queries [OK]
Hint: Remember: createIndex speeds up searches, not data changes [OK]
Common Mistakes:
Confusing createIndex with delete or update operations
Thinking createIndex creates collections
Assuming createIndex modifies documents
2. Which of the following is the correct syntax to create an ascending index on the field age in MongoDB?
easy
A. db.collection.createIndex({ age: 1 })
B. db.collection.createIndex(age: 1)
C. db.collection.createIndex({ age: -1 })
D. db.collection.createIndex({ age })
Solution
Step 1: Recall syntax for createIndex
The method requires an object with field names as keys and 1 or -1 as values for ascending or descending.
Step 2: Identify correct ascending index syntax
{ age: 1 } means ascending index on age. Other options are either descending (-1) or invalid syntax.
Final Answer:
db.collection.createIndex({ age: 1 }) -> Option A
Quick Check:
Ascending index uses 1 [OK]
Hint: Use 1 for ascending, -1 for descending in createIndex [OK]
Common Mistakes:
Using -1 for ascending index
Missing curly braces around field and order
Passing field without object braces
3. Given the command db.users.createIndex({ email: 1 }, { unique: true }), what will happen if you try to insert two documents with the same email value?
medium
A. The index will be ignored and duplicates allowed
B. Both documents will be inserted without error
C. The second insert will fail due to duplicate key error
D. MongoDB will automatically update the first document
Solution
Step 1: Understand unique index effect
Unique index prevents duplicate values in the indexed field.
Step 2: Predict behavior on duplicate insert
Inserting a duplicate email will cause an error and reject the second insert.
Final Answer:
The second insert will fail due to duplicate key error -> Option C
Quick Check:
Unique index blocks duplicates [OK]
Hint: Unique index stops duplicate values in that field [OK]
Common Mistakes:
Assuming duplicates are allowed with unique index
Thinking MongoDB auto-updates duplicates
Believing index is ignored on duplicates
4. What is wrong with this command? db.products.createIndex({ price: 'ascending' })
medium
A. The field name must be a string
B. The collection name is missing
C. createIndex cannot be used on numeric fields
D. The index order must be 1 or -1, not 'ascending'
Solution
Step 1: Check index order values
MongoDB requires 1 for ascending or -1 for descending, not strings like 'ascending'.
Step 2: Identify error cause
Using 'ascending' causes syntax error because it's not a valid order value.
Final Answer:
The index order must be 1 or -1, not 'ascending' -> Option D
Quick Check:
Index order must be 1 or -1 [OK]
Hint: Use 1 or -1 for index order, not words [OK]
Common Mistakes:
Using string values instead of 1 or -1
Thinking createIndex can't index numbers
Confusing collection name with index fields
5. You want to create a compound index on lastName (ascending) and age (descending) fields, ensuring no two documents have the same combination. Which command is correct?
Compound index uses an object with multiple fields and their order: 1 for ascending, -1 for descending.
Step 2: Check uniqueness and order
db.collection.createIndex({ lastName: 1, age: -1 }, { unique: true }) matches ascending lastName (1), descending age (-1), and unique true to prevent duplicates.
Step 3: Verify other options
db.collection.createIndex({ lastName: -1, age: 1 }, { unique: false }) reverses order and is not unique; C uses ascending age instead of descending; D uses invalid string values.