MongoDB Compatibility Guide
Overview
This guide documents MongoDB compatibility issues and fixes for Wekan across MongoDB versions 3.0 through 8.0, ensuring proper operation with Meteor.js 2.14.
Current Status
- Meteor.js Version: 2.14
- MongoDB Package: mongo@1.16.8
- Supported MongoDB Versions: 3.0 - 8.0
- Compatibility Status: ✅ Fixed
Compatibility Issues Fixed
1. Deprecated .count() Method
Issue: The .count() method is deprecated in newer MongoDB versions.
Fixed Files:
models/users.js - Line 1839
server/migrations.js - Line 209
server/publications/cards.js - Lines 709, 711, 713
client/components/settings/adminReports.js - Line 115
Fix Applied:
// Before (deprecated)
const count = collection.find().count();
// After (compatible)
const count = collection.find().countDocuments();
2. MongoDB 8.0 Null/Undefined Equality
Issue: MongoDB 8.0 changed behavior where equality matches to null no longer match undefined values.
Fixed Files:
models/customFields.js - Custom field initialization
models/cards.js - Card custom field initialization
Fix Applied:
// Before (MongoDB 8.0 incompatible)
{ field: null }
// After (MongoDB 8.0 compatible)
{ field: { $in: [null, undefined] } }
Direct Operations Analysis
Purpose of Direct Operations
Direct operations (.direct.insert(), .direct.update(), .direct.remove()) are used intentionally in Wekan to:
- Bypass Meteor Security: For system operations that need to bypass validation
- Migration Scripts: For data migration operations
- Import/Export: For bulk data operations
- System Initialization: For setting up initial data
Files Using Direct Operations
Models:
models/wekanCreator.js - Wekan board creation
models/trelloCreator.js - Trello import
models/cards.js - Card operations
models/boards.js - Board operations
models/lists.js - List operations
models/swimlanes.js - Swimlane operations
models/customFields.js - Custom field operations
models/checklistItems.js - Checklist operations
models/integrations.js - Integration operations
models/csvCreator.js - CSV export operations
Server:
server/migrations.js - Database migrations
server/notifications/outgoing.js - Notification operations
Security Considerations
Direct operations bypass Meteor's security model, so they should only be used when:
- ✅ System-level operations (migrations, imports)
- ✅ Bulk operations that need performance
- ✅ Operations that need to bypass validation
- ❌ User-initiated operations (use regular methods)
- ❌ Operations that need security validation
Raw Collection Usage
Purpose of Raw Collections
Raw collections (.rawCollection()) are used for:
- Advanced Aggregation: Complex aggregation pipelines
- Database Commands: Direct database commands
- Index Management: Creating/dropping indexes
- Migration Operations: Complex data transformations
Files Using Raw Collections
models/server/metrics.js - Metrics aggregation
server/migrations.js - Migration operations
Security Considerations
Raw collections bypass all Meteor security, so they should only be used when:
- ✅ Server-side only operations
- ✅ System administration tasks
- ✅ Complex aggregation pipelines
- ❌ Client-side operations
- ❌ User data operations without validation
Version-Specific Compatibility
MongoDB 3.0 - 3.6
- ✅ Full compatibility
- ✅ Uses mongodb3legacy driver
- ✅ All operations supported
MongoDB 4.0 - 4.4
- ✅ Full compatibility
- ✅ Uses mongodb4legacy driver
- ✅ All operations supported
MongoDB 5.0
- ✅ Full compatibility
- ✅ Uses mongodb5legacy driver
- ✅ All operations supported
MongoDB 6.0
- ✅ Full compatibility
- ✅ Uses mongodb6legacy driver
- ✅ All operations supported
MongoDB 7.0
- ✅ Full compatibility
- ✅ Uses mongodb7legacy driver
- ✅ All operations supported
MongoDB 8.0
- ✅ Full compatibility (after fixes)
- ✅ Uses mongodb8legacy driver
- ✅ Null/undefined equality fixed
Testing Recommendations
Test Matrix
| MongoDB Version |
Driver |
Status |
Test Priority |
| 3.0 |
mongodb3legacy |
✅ Compatible |
High |
| 3.2 |
mongodb3legacy |
✅ Compatible |
High |
| 3.4 |
mongodb3legacy |
✅ Compatible |
High |
| 3.6 |
mongodb3legacy |
✅ Compatible |
High |
| 4.0 |
mongodb4legacy |
✅ Compatible |
High |
| 4.2 |
mongodb4legacy |
✅ Compatible |
High |
| 4.4 |
mongodb4legacy |
✅ Compatible |
High |
| 5.0 |
mongodb5legacy |
✅ Compatible |
Medium |
| 6.0 |
mongodb6legacy |
✅ Compatible |
Medium |
| 7.0 |
mongodb7legacy |
✅ Compatible |
Medium |
| 8.0 |
mongodb8legacy |
✅ Compatible |
High |
Test Scenarios
Basic Operations:
- Create/Read/Update/Delete operations
- Collection queries and filters
- Index operations
Advanced Operations:
- Aggregation pipelines
- Complex queries with null/undefined
- Direct operations
- Raw collection operations
Migration Operations:
- Database migrations
- Data import/export
- Schema changes
Performance Testing:
- Large dataset operations
- Concurrent operations
- Memory usage
Monitoring and Debugging
MongoDB Driver System
The MongoDB driver system provides:
- Automatic version detection
- Driver selection based on MongoDB version
- Connection monitoring
- Error tracking
Debug Methods
// Get connection statistics
Meteor.call('mongodb-driver-stats', (error, result) => {
console.log('Connection Stats:', result);
});
// Test connection
Meteor.call('mongodb-driver-test-connection', (error, result) => {
console.log('Connection Test:', result);
});
// Get supported versions
Meteor.call('mongodb-driver-supported-versions', (error, result) => {
console.log('Supported Versions:', result);
});
Real-time Monitoring
// Subscribe to monitoring
Meteor.subscribe('mongodb-driver-monitor');
// Access data in template
Template.yourTemplate.helpers({
driverStats() {
return MongoDBDriverMonitor.findOne('stats');
}
});
Best Practices
Query Optimization
- Use Indexes: Ensure proper indexes for frequently queried fields
- Limit Results: Use
.limit() and .skip() for pagination
- Project Fields: Use projection to limit returned fields
- Aggregation: Use aggregation pipelines for complex operations
Security
- Validate Input: Always validate user input
- Use Regular Methods: Prefer regular methods over direct operations
- Server-side Only: Keep sensitive operations server-side
- Audit Logging: Log important operations
Performance
- Connection Pooling: Use connection pooling for better performance
- Batch Operations: Use batch operations for bulk data
- Caching: Implement caching for frequently accessed data
- Monitoring: Monitor query performance and optimize as needed
Troubleshooting
Common Issues
Connection Failures:
- Check MONGO_URL configuration
- Verify MongoDB server is running
- Check network connectivity
Query Errors:
- Verify query syntax
- Check field names and types
- Validate MongoDB version compatibility
Performance Issues:
- Check indexes
- Optimize queries
- Monitor connection pool usage
Debug Commands
# Check MongoDB version
mongo --eval "db.version()"
# Check connection status
mongo --eval "db.runCommand({connectionStatus: 1})"
# Check indexes
mongo --eval "db.collection.getIndexes()"
# Check query performance
mongo --eval "db.collection.find().explain('executionStats')"
Migration Guide
From Older MongoDB Versions
- Backup Data: Always backup before migration
- Test Compatibility: Test with target MongoDB version
- Update Drivers: Use appropriate driver for MongoDB version
- Run Migrations: Execute any necessary data migrations
- Validate: Verify all functionality works correctly
To Newer MongoDB Versions
- Check Compatibility: Verify all queries are compatible
- Update Queries: Fix any deprecated method usage
- Test Thoroughly: Test all functionality
- Monitor Performance: Watch for performance changes
- Update Documentation: Update any version-specific documentation
Support
For MongoDB compatibility issues:
- Check this guide for known issues and solutions
- Review MongoDB release notes for version-specific changes
- Test with the MongoDB driver system
- Use the monitoring tools to diagnose issues
- Consult the Wekan community for additional help
License
This MongoDB Compatibility Guide is part of Wekan and is licensed under the MIT License.