MongoDB Query Optimization Interview Questions

Introduction

This guide covers essential MongoDB query optimization techniques and best practices commonly asked in technical interviews. Each question includes detailed answers and practical examples.

Medium

1. What are the key factors that affect MongoDB query performance?

Key factors affecting MongoDB query performance include:

  • Index usage and design
  • Query patterns and selectivity
  • Document size and structure
  • Hardware resources (RAM, CPU, disk)
  • Database configuration
Performance Impact Factors:
  • Index Coverage: Queries using indexes are faster
  • Memory Usage: Working set size affects performance
  • Query Selectivity: More specific queries perform better
  • Document Size: Smaller documents are more efficient
  • Write Load: High write operations can impact read performance
Hard

2. How do you optimize MongoDB queries?

MongoDB query optimization involves several strategies:

1. Index Optimization
// Create appropriate indexes
db.users.createIndex({ email: 1 })
db.users.createIndex({ age: 1, status: 1 })

// Use compound indexes for common query patterns
db.users.createIndex({ 
    status: 1, 
    age: 1, 
    createdAt: -1 
})

// Use covered queries
db.users.find(
    { status: "active", age: { $gt: 25 } },
    { _id: 0, name: 1, email: 1 }
)
2. Query Optimization
// Use projection to limit returned fields
db.users.find(
    { status: "active" },
    { name: 1, email: 1, _id: 0 }
)

// Use limit and skip efficiently
db.users.find({ status: "active" })
    .sort({ createdAt: -1 })
    .limit(10)

// Use aggregation for complex queries
db.users.aggregate([
    { $match: { status: "active" } },
    { $group: { 
        _id: "$age",
        count: { $sum: 1 }
    }},
    { $sort: { count: -1 } }
])
Hard

3. How do you analyze and improve query performance?

Query performance analysis and improvement involves:

1. Using explain()
// Analyze query execution plan
db.users.find({ status: "active" }).explain("executionStats")

// Check index usage
db.users.find({ 
    status: "active",
    age: { $gt: 25 }
}).explain("executionStats")
2. Performance Monitoring
// Monitor slow queries
db.setProfilingLevel(1, { slowms: 100 })

// Check current operations
db.currentOp()

// Analyze index usage
db.users.aggregate([
    { $indexStats: {} }
])
Medium

4. What are the best practices for MongoDB query optimization?

Best practices for MongoDB query optimization include:

  • Design appropriate indexes
  • Use projection to limit returned fields
  • Implement efficient query patterns
  • Monitor and analyze query performance
// Best practice: Use covered queries
db.users.find(
    { status: "active" },
    { _id: 0, name: 1, email: 1 }
)

// Best practice: Use compound indexes
db.users.createIndex({ 
    status: 1, 
    age: 1, 
    createdAt: -1 
})

// Best practice: Use aggregation for complex operations
db.users.aggregate([
    { $match: { status: "active" } },
    { $project: { 
        name: 1,
        email: 1,
        age: 1
    }},
    { $sort: { age: 1 } },
    { $limit: 10 }
])

// Best practice: Use bulk operations
db.users.bulkWrite([
    { 
        updateOne: {
            filter: { status: "inactive" },
            update: { $set: { status: "active" } }
        }
    }
])
Hard

5. How do you handle large datasets in MongoDB?

Handling large datasets in MongoDB requires:

1. Data Partitioning
// Implement sharding
sh.shardCollection("mydb.users", { userId: 1 })

// Use time-based partitioning
db.users.createIndex({ 
    createdAt: 1 
}, { 
    expireAfterSeconds: 30*24*60*60 // 30 days
})
2. Query Optimization
// Use pagination
db.users.find({ status: "active" })
    .sort({ createdAt: -1 })
    .skip(pageSize * (pageNumber - 1))
    .limit(pageSize)

// Use cursor-based pagination
db.users.find({ 
    status: "active",
    createdAt: { $lt: lastDocument.createdAt }
})
    .sort({ createdAt: -1 })
    .limit(pageSize)

Next Steps

Continue your MongoDB interview preparation with: