File size: 4,751 Bytes
34b2632 ea06065 34b2632 ea06065 34b2632 ea06065 34b2632 ea06065 34b2632 ea06065 34b2632 ea06065 34b2632 ea06065 34b2632 ea06065 34b2632 ea06065 34b2632 ea06065 34b2632 ea06065 34b2632 ea06065 34b2632 ea06065 34b2632 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
"""
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)
# Payment Collection Indexes
print("\n📊 Payment Collection:")
# Index for event-specific ticket purchases
db.payments.create_index(
[("eventCode", 1), ("status", 1), ("userId", 1)],
name="idx_payment_event_status_user"
)
print(" ✓ Created: idx_payment_event_status_user")
# Index for user RFM calculation
db.payments.create_index(
[("userId", 1), ("transactionDate", -1)],
name="idx_payment_user_date"
)
print(" ✓ Created: idx_payment_user_date")
# User Collection Indexes (UserFollows is EMBEDDED)
print("\n👥 User Collection:")
# Index for finding users who follow a specific event
# UserFollows is an embedded array, so we use dot notation
db.users.create_index(
[("UserFollows.eventCode", 1)],
name="idx_user_follows_event",
sparse=True # Skip documents without UserFollows
)
print(" ✓ Created: idx_user_follows_event (embedded array)")
# Index for user status (to filter Active users)
db.users.create_index(
[("status", 1)],
name="idx_user_status"
)
print(" ✓ Created: idx_user_status")
# PostSocialMedia Collection Indexes
print("\n💬 PostSocialMedia Collection:")
# Index for event-specific posts
db.post_social_media.create_index(
[("eventCode", 1), ("createdAt", -1)],
name="idx_post_event_date"
)
print(" ✓ Created: idx_post_event_date")
# Index for searching comments (nested in Images.UserCommentPosts)
# Using wildcard for nested arrays
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)")
# EventAudienceSegment Collection Indexes
print("\n🎯 EventAudienceSegment Collection:")
# Index for event owner dashboard
db.event_audience_segments.create_index(
[("event_code", 1)],
name="idx_segment_event"
)
print(" ✓ Created: idx_segment_event")
# Index for status filtering
db.event_audience_segments.create_index(
[("event_code", 1), ("marketing_content.status", 1)],
name="idx_segment_event_status"
)
print(" ✓ Created: idx_segment_event_status")
# EventSentimentSummary Collection Indexes
print("\n📊 EventSentimentSummary Collection:")
# Index for event sentiment lookup
db.event_sentiment_summary.create_index(
[("event_code", 1), ("last_updated", -1)],
name="idx_sentiment_event_date"
)
print(" ✓ Created: idx_sentiment_event_date")
# SentimentAnalysisResult Collection Indexes
print("\n💭 SentimentAnalysisResult Collection:")
# Index for event-specific sentiment results
db.sentiment_results.create_index(
[("event_code", 1), ("analyzed_at", -1)],
name="idx_sentiment_result_event_date"
)
print(" ✓ Created: idx_sentiment_result_event_date")
# Index for sentiment label filtering
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)
# List all indexes for verification
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()
|