Anti-patterns to avoid in MongoDB - Time & Space Complexity
When working with MongoDB, some ways of writing queries or structuring data can slow things down a lot as your data grows.
We want to see which common mistakes cause the database to do much more work than needed.
Analyze the time complexity of this MongoDB query pattern.
// Find documents without an index on 'status'
db.orders.find({ status: "pending" })
// Update many documents without a filter on indexed field
db.orders.updateMany({}, { $set: { processed: true } })
// Using $where with JavaScript function
db.orders.find({ $where: function() { return this.amount > 100; } })
This code shows common query patterns that can cause slow performance as data grows.
Look for operations that repeat over many documents.
- Primary operation: Scanning documents one by one because no index is used.
- How many times: Once for each document in the collection.
As the number of documents grows, the database must check each one without shortcuts.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 document checks |
| 100 | 100 document checks |
| 1000 | 1000 document checks |
Pattern observation: The work grows directly with the number of documents, so doubling data doubles work.
Time Complexity: O(n)
This means the database must look at every document, so more data means more work in a straight line.
[X] Wrong: "Using $where or no index is fine because MongoDB is fast enough to handle it."
[OK] Correct: Without indexes, MongoDB must scan every document, which gets slower as data grows and can cause delays.
Understanding these anti-patterns helps you write queries that stay fast even when data grows big, a skill valuable in real projects.
"What if we added an index on the 'status' field? How would the time complexity change?"
Practice
Solution
Step 1: Understand data model best practices
MongoDB recommends avoiding very large arrays inside one document because it can slow down queries and updates.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.Final Answer:
Storing huge arrays inside a single document -> Option BQuick Check:
Huge arrays in one document = anti-pattern [OK]
- Thinking indexes are bad
- Believing deep nesting is good
- Ignoring document size limits
Solution
Step 1: Check document nesting levels
{ name: "Alice", address: { city: "NY", zip: 10001 } }has shallow nesting: address contains city and zip directly.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.Final Answer:
{ name: "Alice", address: { city: "NY", zip: 10001 } } -> Option AQuick Check:
Shallow nesting = correct syntax and good practice [OK]
- Confusing deep nesting with valid nested objects
- Using strings instead of objects for structured data
- Ignoring syntax errors in nested documents
Solution
Step 1: Understand query execution without indexes
Without indexes, MongoDB performs a collection scan, checking every document.Step 2: Impact of large arrays on query speed
Large arrays increase document size, making scans slower and more resource-intensive.Final Answer:
Slow query performance due to collection scan -> Option DQuick Check:
No index + large arrays = slow queries [OK]
- Assuming queries are always fast
- Expecting automatic array splitting
- Confusing syntax errors with performance issues
Solution
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.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.Final Answer:
Split the large array into multiple documents in a separate collection -> Option AQuick Check:
Split large data for frequent updates [OK]
- Updating large arrays in one document
- Removing indexes which slows queries
- Increasing nesting depth unnecessarily
Solution
Step 1: Analyze the data size and update frequency
Users can have many posts and comments, which can grow large and update often.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.Final Answer:
Use separate collections for users, posts, and comments with references -> Option CQuick Check:
Separate collections avoid large arrays and deep nesting [OK]
- Putting all data in one document
- Deep nesting of comments inside posts
- Mixing document types in one collection
Ready to prove it?
Pass the test and this pattern moves unknown
