|
|
"""
|
|
|
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()
|
|
|
|