6 min read
•Question 7 of 27mediumHow do you design schemas in MongoDB?
Schema design patterns and best practices.
What You'll Learn
- Embedding vs referencing
- Design patterns
- Best practices
Embedding vs Referencing
Embedding (Denormalization)
code.jsJavaScript
// User with embedded addresses
{
_id: ObjectId("..."),
name: "John",
addresses: [
{ type: "home", city: "NYC", zip: "10001" },
{ type: "work", city: "Boston", zip: "02101" }
]
}Referencing (Normalization)
code.jsJavaScript
// User document
{ _id: ObjectId("user1"), name: "John" }
// Separate orders collection
{ _id: ObjectId("order1"), userId: ObjectId("user1"), total: 99.99 }When to Embed
- One-to-few relationships
- Data always accessed together
- Data doesn't change frequently
- Document size < 16MB
When to Reference
- One-to-many (large) relationships
- Many-to-many relationships
- Data accessed independently
- Frequently updated data
Design Patterns
Subset Pattern
code.jsJavaScript
// Store recent reviews embedded, rest in separate collection
{
_id: 1,
name: "Product",
recentReviews: [...], // Last 10
reviewCount: 1000
}Bucket Pattern
code.jsJavaScript
// Group time-series data
{
sensorId: "temp-1",
date: "2024-01-15",
readings: [
{ time: "00:00", value: 22.5 },
{ time: "01:00", value: 22.3 }
]
}Best Practices
- Design for your queries
- Avoid unbounded arrays
- Consider document growth
- Use appropriate indexes