Bird
Raised Fist0
MongoDBquery~30 mins

Anti-patterns to avoid in MongoDB - Mini Project: Build & Apply

Choose your learning style10 modes available
Avoiding Common MongoDB Anti-patterns
📖 Scenario: You are building a simple online bookstore database using MongoDB. You want to store information about books and their authors efficiently and correctly.
🎯 Goal: Learn how to set up MongoDB collections properly by avoiding common anti-patterns such as embedding too much data, using inconsistent data types, and not indexing properly.
📋 What You'll Learn
Create a books collection with specific fields
Create an authors collection separately
Use references between collections instead of embedding all data
Add an index on the title field in books
Avoid storing arrays with inconsistent data types
💡 Why This Matters
🌍 Real World
This project models a real online bookstore database where authors and books are stored separately to keep data organized and efficient.
💼 Career
Understanding how to avoid MongoDB anti-patterns is essential for database developers and administrators to build scalable and maintainable applications.
Progress0 / 4 steps
1
Create the authors collection with sample data
Create a MongoDB collection called authors and insert exactly two documents with these fields: _id as ObjectId, name as string, and birth_year as number. Use these exact values: first author with name "Jane Austen" and birth_year 1775, second author with name "Mark Twain" and birth_year 1835.
MongoDB
Hint

Use insertMany to add multiple documents to the authors collection.

2
Create the books collection with references to authors
Create a MongoDB collection called books and insert exactly two documents with these fields: title as string, author_id as ObjectId referencing the _id of the author in the authors collection, and year_published as number. Use these exact values: first book titled "Pride and Prejudice" by Jane Austen published in 1813, second book titled "Adventures of Huckleberry Finn" by Mark Twain published in 1884.
MongoDB
Hint

Use findOne to get the _id of each author and reference it in the books documents.

3
Add an index on the title field in books
Create an index on the title field in the books collection to improve search performance. Use the exact command to create this index.
MongoDB
Hint

Use createIndex on the books collection specifying the title field with ascending order.

4
Avoid inconsistent data types in arrays
Modify the books collection to add a new field called genres which is an array of strings. Insert exactly these genres for each book: for "Pride and Prejudice" use ["Romance", "Classic"], for "Adventures of Huckleberry Finn" use ["Adventure", "Classic"]. Ensure all array elements are strings to avoid inconsistent data types.
MongoDB
Hint

Add the genres field as an array of strings inside each book document.

Practice

(1/5)
1. Which of the following is an anti-pattern to avoid in MongoDB when designing your data model?
easy
A. Splitting large data into separate collections
B. Storing huge arrays inside a single document
C. Using indexes to speed up queries
D. Keeping documents shallow with minimal nesting

Solution

  1. Step 1: Understand data model best practices

    MongoDB recommends avoiding very large arrays inside one document because it can slow down queries and updates.
  2. Step 2: Identify the anti-pattern

    Options A, B, and D are good practices, but storing huge arrays in one document is an anti-pattern.
  3. Final Answer:

    Storing huge arrays inside a single document -> Option B
  4. Quick Check:

    Huge arrays in one document = anti-pattern [OK]
Hint: Large arrays in one document slow performance [OK]
Common Mistakes:
  • Thinking indexes are bad
  • Believing deep nesting is good
  • Ignoring document size limits
2. Which of the following MongoDB document structures is syntactically correct, uses a structured object for address, and avoids the deep nesting anti-pattern?
easy
A. { name: "Alice", address: { city: "NY", zip: 10001 } }
B. { name: "Bob", address: { city: { name: "LA", code: { zip: 90001 } } } }
C. { name: "Carol", address: { city: { name: { code: { zip: 12345 } } } } }
D. { name: "Dave", address: "New York" }

Solution

  1. Step 1: Check document nesting levels

    { name: "Alice", address: { city: "NY", zip: 10001 } } has shallow nesting: address contains city and zip directly.
  2. Step 2: Identify deep nesting anti-pattern

    Options A and C have multiple nested objects inside city, which is deep nesting. { name: "Dave", address: "New York" } uses a string for address, which is valid but less structured.
  3. Final Answer:

    { name: "Alice", address: { city: "NY", zip: 10001 } } -> Option A
  4. Quick Check:

    Shallow nesting = correct syntax and good practice [OK]
Hint: Avoid multiple nested objects inside one field [OK]
Common Mistakes:
  • Confusing deep nesting with valid nested objects
  • Using strings instead of objects for structured data
  • Ignoring syntax errors in nested documents
3. Given a MongoDB collection with documents containing a large array field, what is the likely result of querying without indexes?
medium
A. Automatic splitting of large arrays into smaller parts
B. Fast query response even with large arrays
C. Syntax error in query execution
D. Slow query performance due to collection scan

Solution

  1. Step 1: Understand query execution without indexes

    Without indexes, MongoDB performs a collection scan, checking every document.
  2. Step 2: Impact of large arrays on query speed

    Large arrays increase document size, making scans slower and more resource-intensive.
  3. Final Answer:

    Slow query performance due to collection scan -> Option D
  4. Quick Check:

    No index + large arrays = slow queries [OK]
Hint: No index means full scan, slow with big arrays [OK]
Common Mistakes:
  • Assuming queries are always fast
  • Expecting automatic array splitting
  • Confusing syntax errors with performance issues
4. You have a MongoDB document with a very large array that is frequently updated. What is the best way to fix performance issues?
medium
A. Split the large array into multiple documents in a separate collection
B. Keep the large array inside the same document and update it directly
C. Remove indexes to speed up updates
D. Nest the array deeper inside the document

Solution

  1. Step 1: Identify the problem with large arrays and frequent updates

    Large arrays inside one document cause slow updates and can hit document size limits.
  2. Step 2: Choose the best solution to improve performance

    Splitting the array into multiple documents in a separate collection reduces document size and update cost.
  3. Final Answer:

    Split the large array into multiple documents in a separate collection -> Option A
  4. Quick Check:

    Split large data for frequent updates [OK]
Hint: Split big arrays into separate documents [OK]
Common Mistakes:
  • Updating large arrays in one document
  • Removing indexes which slows queries
  • Increasing nesting depth unnecessarily
5. You want to design a MongoDB schema for a social media app where users have many posts and comments. Which design avoids anti-patterns?
hard
A. Store all posts and comments as large arrays inside each user document
B. Nest comments deeply inside each post inside the user document
C. Use separate collections for users, posts, and comments with references
D. Keep all data in one collection with mixed document types

Solution

  1. Step 1: Analyze the data size and update frequency

    Users can have many posts and comments, which can grow large and update often.
  2. Step 2: Choose schema design to avoid large arrays and deep nesting

    Using separate collections with references avoids huge arrays and deep nesting, improving performance and scalability.
  3. Final Answer:

    Use separate collections for users, posts, and comments with references -> Option C
  4. Quick Check:

    Separate collections avoid large arrays and deep nesting [OK]
Hint: Separate collections for related large data sets [OK]
Common Mistakes:
  • Putting all data in one document
  • Deep nesting of comments inside posts
  • Mixing document types in one collection
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard