Introduction
MongoDB is powerful but easy to misuse. Here's what actually matters in production.
1. Always Use Indexes
Without indexes, every query does a full collection scan.
// Create index on frequently queried fields
db.users.createIndex({ email: 1 }, { unique: true })
db.posts.createIndex({ userId: 1, createdAt: -1 })
2. Use Projection to Limit Fields
// ❌ Bad — fetches everything
const user = await User.findById(id)
// ✅ Good — only what you need
const user = await User.findById(id).select('name email avatar')
3. Paginate Everything
Never return unlimited documents:
const posts = await Post
.find({ published: true })
.sort({ createdAt: -1 })
.limit(10)
.skip((page - 1) * 10)
4. Use Aggregation Pipeline
For complex queries, aggregation is much faster than multiple queries.
5. Connection Pooling
Always use a singleton connection pattern — never create new connections per request.
6. Validate Data with Mongoose
const UserSchema = new Schema({
email: { type: String, required: true, unique: true, lowercase: true },
age: { type: Number, min: 0, max: 120 },
})
Conclusion
These practices will make your MongoDB database reliable, fast, and maintainable at scale.