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.