Error
Error Code: 50

MongoDB Error 50: Operation Exceeded Time Limit

📦 MongoDB
📋

Description

Error 50, 'Max Time M S Expired', indicates that a MongoDB operation, such as a query or aggregation, failed to complete within its allotted `maxTimeMS` execution limit. This error occurs when the specified time constraint is exceeded, typically due to long-running operations, inefficient query plans, or performance bottlenecks on the server.
💬

Error Message

Max Time M S Expired
🔍

Known Causes

4 known causes
⚠️
Inefficient Query Execution
The MongoDB query or aggregation pipeline is not optimized, requiring excessive time to process the requested data.
⚠️
Resource Constraints
The MongoDB server lacks sufficient CPU, memory, or disk I/O to execute the operation efficiently within the given time.
⚠️
Large Data Scan or Missing Indexes
The operation needs to scan a vast number of documents or lacks appropriate indexes, leading to slow data retrieval.
⚠️
Aggressive maxTimeMS Setting
The `maxTimeMS` value was set too low for the expected complexity and volume of the operation, causing premature timeouts.
🛠️

Solutions

4 solutions available

1. Add Index for Query medium

Create index to speed up query

1
Identify slow query fields
db.collection.find({ field: value }).explain("executionStats")
2
Create index
db.collection.createIndex({ field: 1 })
3
Create compound index for multiple fields
db.collection.createIndex({ field1: 1, field2: -1 })

2. Increase maxTimeMS easy

Allow more time for the operation

1
Set timeout on query
db.collection.find({ field: value }).maxTimeMS(60000)  // 60 seconds
2
Set in aggregation
db.collection.aggregate([...], { maxTimeMS: 60000 })

3. Optimize Query medium

Reduce query scope

1
Limit results
db.collection.find({ field: value }).limit(100)
2
Project only needed fields
db.collection.find({ field: value }, { name: 1, email: 1 })
3
Add more selective filter
// Add date range to reduce scanned documents
db.logs.find({
  created: { $gte: ISODate("2024-01-01") },
  level: "error"
})

4. Check for Collection Scans medium

Avoid scanning entire collection

1
Check query execution plan
db.collection.find({ field: value }).explain("executionStats")
// Look for "COLLSCAN" which indicates no index used
2
Use hint to force index
db.collection.find({ field: value }).hint({ field: 1 })
🔗

Related Errors

5 related errors