Bird
Raised Fist0
MongoDBquery~20 mins

Choosing a good shard key in MongoDB - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Shard Key Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
2:00remaining
Why is a shard key important in MongoDB?

Imagine you have a huge collection of documents in MongoDB. You want to split this data across many servers to keep things fast and balanced. Why do you need a shard key for this?

AIt stores user passwords securely.
BIt decides how data is split and helps queries find data quickly.
CIt compresses data to save disk space.
DIt backs up data automatically every hour.
Attempts:
2 left
💡 Hint

Think about how data is divided and found in many places.

❓ query_result
intermediate
2:00remaining
What happens if you choose a shard key with low cardinality?

You have a collection where the shard key is a field with only two possible values. What is the likely result when you shard the collection on this key?

AQueries will run faster because of fewer shard key values.
BData will be perfectly balanced across all servers.
CMongoDB will reject the shard key due to low cardinality.
DData will be unevenly distributed, causing some servers to hold most data.
Attempts:
2 left
💡 Hint

Think about how many different values the shard key has and how data spreads.

📝 Syntax
advanced
2:30remaining
Which shard key definition is valid and efficient for a collection with user activity logs?

You want to shard a collection storing user activity logs. Each document has a userId and a timestamp. Which shard key is best to balance load and support queries filtering by user and time?

MongoDB
db.activity.createIndex({ userId: 1, timestamp: 1 })
A{ timestamp: 1 }
B{ userId: 1 }
C{ userId: 1, timestamp: 1 }
D{ activityType: 1 }
Attempts:
2 left
💡 Hint

Consider which key helps distribute data and supports common queries.

❓ optimization
advanced
2:30remaining
How to avoid hotspotting with a shard key in MongoDB?

You notice one shard is overloaded because many writes target the same shard key value. What is a good way to avoid this hotspotting?

AChoose a shard key with high cardinality and randomness.
BUse a shard key with only a few distinct values.
CShard on a field that never changes.
DDisable sharding and use a single server.
Attempts:
2 left
💡 Hint

Think about spreading writes evenly across shards.

🔧 Debug
expert
3:00remaining
Why does this shard key choice cause unbalanced data?

A collection is sharded on the country field. Most documents have country set to 'USA'. What problem arises and why?

AMost data goes to one shard, causing imbalance and slow queries.
BMongoDB automatically balances data evenly regardless of shard key.
CThe shard key causes data duplication across shards.
DQueries fail because <code>country</code> is not indexed.
Attempts:
2 left
💡 Hint

Think about how many documents share the same shard key value.

Practice

(1/5)
1. Which of the following is the most important characteristic of a good shard key in MongoDB?
easy
A. It is the smallest field in the document.
B. It is always a string type.
C. It has many unique values to distribute data evenly.
D. It contains only numeric values.

Solution

  1. Step 1: Understand shard key purpose

    A shard key is used to split data across servers to balance load and improve speed.
  2. Step 2: Identify key characteristic for even distribution

    A good shard key has many unique values to avoid data being stored unevenly on shards.
  3. Final Answer:

    It has many unique values to distribute data evenly. -> Option C
  4. Quick Check:

    Unique values = balanced shards [OK]
Hint: Choose shard keys with many unique values for balance [OK]
Common Mistakes:
  • Thinking shard key must be string
  • Choosing small fields regardless of uniqueness
  • Assuming numeric only keys are best
2. Which of the following is the correct syntax to create a sharded collection with shard key { userId: 1 } in MongoDB?
easy
A. sh.shardCollection('mydb.users', 'userId')
B. db.shardCollection('users', { userId: 1 })
C. sh.shardCollection('users', { userId: 1 })
D. sh.shardCollection('mydb.users', { userId: 1 })

Solution

  1. Step 1: Recall syntax for sharding a collection

    The correct command is sh.shardCollection(namespace, shardKey), where namespace is 'database.collection'.
  2. Step 2: Match options to syntax

    sh.shardCollection('mydb.users', { userId: 1 }) uses full namespace 'mydb.users' and correct shard key object { userId: 1 }.
  3. Final Answer:

    sh.shardCollection('mydb.users', { userId: 1 }) -> Option D
  4. Quick Check:

    Full namespace + shard key object = correct syntax [OK]
Hint: Use full 'db.collection' name and shard key object [OK]
Common Mistakes:
  • Using db.shardCollection instead of sh.shardCollection
  • Passing shard key as string instead of object
  • Omitting database name in namespace
3. Given a collection sharded on { country: 1 }, which query will benefit most from the shard key?
medium
A. db.users.find({ age: { $gt: 30 } })
B. db.users.find({ country: 'USA' })
C. db.users.find({ name: 'Alice' })
D. db.users.find({ city: 'New York' })

Solution

  1. Step 1: Understand shard key usage in queries

    Queries that include the shard key field can target specific shards, improving speed.
  2. Step 2: Identify query with shard key field

    Only db.users.find({ country: 'USA' }) filters by country, the shard key, so it benefits most.
  3. Final Answer:

    db.users.find({ country: 'USA' }) -> Option B
  4. Quick Check:

    Query includes shard key field = faster query [OK]
Hint: Queries with shard key filter run faster [OK]
Common Mistakes:
  • Assuming any query runs faster on sharded collection
  • Ignoring shard key field in query
  • Confusing shard key with indexed fields
4. You created a shard key on { userId: 1 } but notice all data is stored on one shard. What is the likely cause?
medium
A. The userId field has low cardinality (few unique values).
B. The shard key was created with descending order { userId: -1 }.
C. The collection is not sharded yet.
D. The shard key field is missing in some documents.

Solution

  1. Step 1: Understand shard key distribution

    If the shard key has few unique values, data will cluster on few shards causing imbalance.
  2. Step 2: Analyze options

    Low cardinality of userId causes data to be stored on one shard, matching the problem.
  3. Final Answer:

    The userId field has low cardinality (few unique values). -> Option A
  4. Quick Check:

    Low uniqueness = data imbalance [OK]
Hint: Low unique shard key values cause data to cluster [OK]
Common Mistakes:
  • Thinking shard key order affects distribution
  • Assuming collection is not sharded without checking
  • Ignoring missing shard key fields in documents
5. You have a large collection of orders with fields orderId, customerId, and orderDate. You want to shard to optimize queries filtering by customerId and range queries on orderDate. Which shard key is best?
hard
A. { customerId: 1, orderDate: 1 }
B. { orderDate: 1 }
C. { orderId: 1 }
D. { customerId: 1 }

Solution

  1. Step 1: Identify query patterns

    Queries filter by customerId and also use range on orderDate.
  2. Step 2: Choose shard key matching query patterns

    A compound shard key with { customerId: 1, orderDate: 1 } supports both equality and range queries efficiently.
  3. Final Answer:

    { customerId: 1, orderDate: 1 } -> Option A
  4. Quick Check:

    Compound shard key matches query filters [OK]
Hint: Use compound shard key for multiple query filters [OK]
Common Mistakes:
  • Choosing single field shard key ignoring query patterns
  • Using orderId which is not queried
  • Not using compound keys for combined filters
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