📖 Scenario: You work at a small bookstore that stores book information in a MongoDB database. You want to find books by searching for patterns in their titles using regular expressions.
🎯 Goal: Build a MongoDB query that uses regex to find books with titles matching specific patterns.
📋 What You'll Learn
Create a collection called books with sample book documents
Add a regex pattern variable to search titles
Write a MongoDB query using $regex to find matching books
Complete the query with options to make the search case-insensitive
💡 Why This Matters
🌍 Real World
Bookstores and libraries often need to search for books by partial title matches or patterns. Regex queries in MongoDB help find these books efficiently.
💼 Career
Knowing how to use regex queries in MongoDB is useful for database developers and data analysts who work with flexible text search requirements.
Progress0 / 4 steps
1
Create the books collection with sample data
Create a MongoDB collection called books and insert these exact documents: { title: "The Great Gatsby", author: "F. Scott Fitzgerald" }, { title: "Great Expectations", author: "Charles Dickens" }, and { title: "Gone with the Wind", author: "Margaret Mitchell" }.
MongoDB
Hint
Use insertMany on db.books with an array of the three book objects.
2
Add a regex pattern variable for searching titles
Create a variable called pattern and set it to the regex string "Great" to search for titles containing the word "Great".
MongoDB
Hint
Use const pattern = "Great" to define the regex string.
3
Write a MongoDB query using $regex to find matching books
Write a MongoDB query that finds all documents in books where the title field matches the regex pattern stored in pattern. Use $regex with the variable pattern.
MongoDB
Hint
Use db.books.find({ title: { $regex: pattern } }) to query with regex.
4
Complete the query with case-insensitive option
Modify the query to add the $options field with value "i" to make the regex search case-insensitive.
MongoDB
Hint
Add $options: "i" inside the title query object to ignore case.
Practice
(1/5)
1. What does the $regex operator do in a MongoDB query?
easy
A. It searches for documents where a field matches a text pattern.
B. It sorts documents in ascending order.
C. It updates documents with new values.
D. It deletes documents matching a condition.
Solution
Step 1: Understand the purpose of $regex
The $regex operator is used to find text patterns inside string fields in MongoDB documents.
Step 2: Compare with other operations
Sorting, updating, and deleting are different operations and do not use $regex.
Final Answer:
It searches for documents where a field matches a text pattern. -> Option A
Quick Check:
$regex = pattern search [OK]
Hint: Remember: $regex means 'match pattern' in text fields [OK]
Common Mistakes:
Confusing $regex with sorting or updating operations
Thinking $regex modifies data instead of searching
Assuming $regex works on non-string fields
2. Which of the following is the correct syntax to find documents where the field name starts with 'A' using regex in MongoDB?
easy
A. {"name": {"$regex": "A$"}}
B. {"name": {"$regex": "A*"}}
C. {"name": {"$regex": "^A"}}
D. {"name": {"$regex": "[A]"}}
Solution
Step 1: Understand regex anchors
The caret ^ means the start of the string, so ^A matches strings starting with 'A'.
Step 2: Check other options
A$ matches strings ending with 'A', A* matches zero or more 'A's anywhere, and [A] matches any 'A' character anywhere.
Final Answer:
{"name": {"$regex": "^A"}} -> Option C
Quick Check:
Start with 'A' = ^A [OK]
Hint: Use ^ at start of pattern to match beginning of string [OK]
Common Mistakes:
Using $ instead of ^ to match start
Misunderstanding * as 'starts with'
Using character class [] without anchors
3. Given the collection documents: [{"city": "London"}, {"city": "london"}, {"city": "Londonderry"}], what will the query {"city": {"$regex": "^London$", "$options": "i"}} return?
medium
A. []
B. [{"city": "London"}]
C. [{"city": "Londonderry"}]
D. [{"city": "London"}, {"city": "london"}]
Solution
Step 1: Analyze the regex pattern and options
The pattern ^London$ matches exactly 'London' from start to end. The option i makes it case-insensitive.
Step 2: Check which documents match
"London" matches exactly, "london" matches ignoring case, but "Londonderry" does not match because it has extra characters.
Final Answer:
[{"city": "London"}, {"city": "london"}] -> Option D
Quick Check:
Exact match ignoring case = [{"city": "London"}, {"city": "london"}] [OK]
Hint: Use ^ and $ for exact match; 'i' option ignores case [OK]
Common Mistakes:
Ignoring case option and missing lowercase match
Assuming partial matches without anchors
Confusing $regex with substring search
4. Identify the error in this MongoDB query to find documents where title contains 'book' case-insensitive: {"title": {"$regex": "/book/i"}}
medium
A. The $regex operator cannot be used with strings.
B. The regex pattern should not be enclosed in slashes.
C. The $options field is missing.
D. The field name should be $pattern, not $regex.
Solution
Step 1: Understand MongoDB regex syntax
In MongoDB, the regex pattern is a string without enclosing slashes. Options like 'i' go in a separate $options field.
Step 2: Identify the mistake in the query
The pattern "/book/i" incorrectly includes slashes and option inside the string. It should be {"$regex": "book", "$options": "i"}.
Final Answer:
The regex pattern should not be enclosed in slashes. -> Option B
Quick Check:
MongoDB regex no slashes, use $options [OK]
Hint: Do not use /slashes/ in MongoDB regex patterns [OK]
Common Mistakes:
Including slashes around regex pattern
Putting options inside the pattern string
Using wrong field names like $pattern
5. You want to find all documents where the description field contains either 'cat' or 'dog' (case-insensitive). Which MongoDB query correctly uses regex to achieve this?
hard
A. {"description": {"$regex": "cat|dog", "$options": "i"}}
B. {"description": {"$regex": "[cat|dog]", "$options": "i"}}
C. {"description": {"$regex": "(cat|dog)", "$options": "g"}}
D. {"description": {"$regex": "cat|dog"}}
Solution
Step 1: Understand regex alternation and options
The pattern cat|dog matches either 'cat' or 'dog'. The i option makes it case-insensitive.
Step 2: Evaluate each option
{"description": {"$regex": "cat|dog", "$options": "i"}} correctly uses the pattern and case-insensitive option. {"description": {"$regex": "[cat|dog]", "$options": "i"}} uses character class incorrectly, matching any single character 'c', 'a', 't', '|', 'd', 'o', or 'g'. {"description": {"$regex": "(cat|dog)", "$options": "g"}} uses g which is not a valid MongoDB regex option. {"description": {"$regex": "cat|dog"}} misses the case-insensitive option.
Final Answer:
{"description": {"$regex": "cat|dog", "$options": "i"}} -> Option A
Quick Check:
Use | for OR and 'i' for ignore case [OK]
Hint: Use | inside regex and $options: 'i' for case-insensitive [OK]
Common Mistakes:
Using character classes [] instead of alternation |
Using invalid regex options like 'g' in MongoDB
Forgetting $options for case-insensitive search
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.