| """
|
| MongoDB Index Creation Script
|
| Author: AI Generated
|
| Created: 2025-11-24 (Fixed for actual schema)
|
| Purpose: Create performance indexes matching actual MongoDB structure
|
| """
|
|
|
| from database import db
|
| from config import settings
|
|
|
|
|
| def create_all_indexes():
|
| """
|
| Create all necessary indexes for optimal performance.
|
| Based on ACTUAL MongoDB structure from models.txt
|
| """
|
|
|
| print("=" * 60)
|
| print("🔧 Creating MongoDB Indexes (Corrected Schema)")
|
| print("=" * 60)
|
|
|
|
|
| print("\n📊 Payment Collection:")
|
|
|
|
|
| db.payments.create_index(
|
| [("eventCode", 1), ("status", 1), ("userId", 1)],
|
| name="idx_payment_event_status_user"
|
| )
|
| print(" ✓ Created: idx_payment_event_status_user")
|
|
|
|
|
| db.payments.create_index(
|
| [("userId", 1), ("transactionDate", -1)],
|
| name="idx_payment_user_date"
|
| )
|
| print(" ✓ Created: idx_payment_user_date")
|
|
|
|
|
| print("\n👥 User Collection:")
|
|
|
|
|
|
|
| db.users.create_index(
|
| [("UserFollows.eventCode", 1)],
|
| name="idx_user_follows_event",
|
| sparse=True
|
| )
|
| print(" ✓ Created: idx_user_follows_event (embedded array)")
|
|
|
|
|
| db.users.create_index(
|
| [("status", 1)],
|
| name="idx_user_status"
|
| )
|
| print(" ✓ Created: idx_user_status")
|
|
|
|
|
| print("\n💬 PostSocialMedia Collection:")
|
|
|
|
|
| db.post_social_media.create_index(
|
| [("eventCode", 1), ("createdAt", -1)],
|
| name="idx_post_event_date"
|
| )
|
| print(" ✓ Created: idx_post_event_date")
|
|
|
|
|
|
|
| db.post_social_media.create_index(
|
| [("eventCode", 1), ("images.userCommentPosts.commentedAt", -1)],
|
| name="idx_post_comments",
|
| sparse=True
|
| )
|
| print(" ✓ Created: idx_post_comments (nested array)")
|
|
|
|
|
| print("\n🎯 EventAudienceSegment Collection:")
|
|
|
|
|
| db.event_audience_segments.create_index(
|
| [("event_code", 1)],
|
| name="idx_segment_event"
|
| )
|
| print(" ✓ Created: idx_segment_event")
|
|
|
|
|
| db.event_audience_segments.create_index(
|
| [("event_code", 1), ("marketing_content.status", 1)],
|
| name="idx_segment_event_status"
|
| )
|
| print(" ✓ Created: idx_segment_event_status")
|
|
|
|
|
| print("\n📊 EventSentimentSummary Collection:")
|
|
|
|
|
| db.event_sentiment_summary.create_index(
|
| [("event_code", 1), ("last_updated", -1)],
|
| name="idx_sentiment_event_date"
|
| )
|
| print(" ✓ Created: idx_sentiment_event_date")
|
|
|
|
|
| print("\n💭 SentimentAnalysisResult Collection:")
|
|
|
|
|
| db.sentiment_results.create_index(
|
| [("event_code", 1), ("analyzed_at", -1)],
|
| name="idx_sentiment_result_event_date"
|
| )
|
| print(" ✓ Created: idx_sentiment_result_event_date")
|
|
|
|
|
| db.sentiment_results.create_index(
|
| [("event_code", 1), ("sentiment_label", 1)],
|
| name="idx_sentiment_event_label"
|
| )
|
| print(" ✓ Created: idx_sentiment_event_label")
|
|
|
| print("\n" + "=" * 60)
|
| print("✅ All Indexes Created Successfully!")
|
| print("=" * 60)
|
|
|
|
|
| print("\n📋 Index Summary:")
|
| print(f" Payment: {len(list(db.payments.list_indexes()))} indexes")
|
| print(f" User: {len(list(db.users.list_indexes()))} indexes")
|
| print(f" PostSocialMedia: {len(list(db.post_social_media.list_indexes()))} indexes")
|
| print(f" EventAudienceSegment: {len(list(db.event_audience_segments.list_indexes()))} indexes")
|
| print(f" EventSentimentSummary: {len(list(db.event_sentiment_summary.list_indexes()))} indexes")
|
| print(f" SentimentAnalysisResult: {len(list(db.sentiment_results.list_indexes()))} indexes")
|
|
|
|
|
| if __name__ == "__main__":
|
| create_all_indexes()
|
|
|