diff --git a/src/database/migrations/init.rs b/src/database/migrations/init.rs index 4dae83a4..2b7c1b73 100644 --- a/src/database/migrations/init.rs +++ b/src/database/migrations/init.rs @@ -102,6 +102,12 @@ pub async fn create_database() { "content": "text" }, "name": "content" + }, + { + "key": { + "channel": 1 + }, + "name": "channel" } ] }, @@ -110,6 +116,56 @@ pub async fn create_database() { .await .expect("Failed to create message index."); + get_db() + .run_command( + doc! { + "createIndexes": "messages", + "indexes": [ + { + "key": { + "_id.channel": 1, + "_id.user": 1, + }, + "name": "compound_id" + }, + { + "key": { + "_id.user": 1, + }, + "name": "user_id" + } + ] + }, + None, + ) + .await + .expect("Failed to create channel_unreads index."); + + get_db() + .run_command( + doc! { + "createIndexes": "messages", + "indexes": [ + { + "key": { + "_id.server": 1, + "_id.user": 1, + }, + "name": "compound_id" + }, + { + "key": { + "_id.user": 1, + }, + "name": "user_id" + } + ] + }, + None, + ) + .await + .expect("Failed to create server_members index."); + db.collection("migrations") .insert_one( doc! { diff --git a/src/database/migrations/scripts.rs b/src/database/migrations/scripts.rs index cbf5ac3d..eeb12d6d 100644 --- a/src/database/migrations/scripts.rs +++ b/src/database/migrations/scripts.rs @@ -11,7 +11,7 @@ struct MigrationInfo { revision: i32, } -pub const LATEST_REVISION: i32 = 11; +pub const LATEST_REVISION: i32 = 12; pub async fn migrate_database() { let migrations = get_collection("migrations"); @@ -372,6 +372,78 @@ pub async fn run_migrations(revision: i32) -> i32 { .unwrap(); } + if revision <= 11 { + info!("Running migration [revision 11 / 2021-11-14]: Add indexes to database."); + + get_db() + .run_command( + doc! { + "createIndexes": "messages", + "indexes": [ + { + "key": { + "channel": 1 + }, + "name": "channel" + } + ] + }, + None, + ) + .await + .expect("Failed to create message index."); + + get_db() + .run_command( + doc! { + "createIndexes": "messages", + "indexes": [ + { + "key": { + "_id.channel": 1, + "_id.user": 1, + }, + "name": "compound_id" + }, + { + "key": { + "_id.user": 1, + }, + "name": "user_id" + } + ] + }, + None, + ) + .await + .expect("Failed to create channel_unreads index."); + + get_db() + .run_command( + doc! { + "createIndexes": "messages", + "indexes": [ + { + "key": { + "_id.server": 1, + "_id.user": 1, + }, + "name": "compound_id" + }, + { + "key": { + "_id.user": 1, + }, + "name": "user_id" + } + ] + }, + None, + ) + .await + .expect("Failed to create server_members index."); + } + // Need to migrate fields on attachments, change `user_id`, `object_id`, etc to `parent`. // Reminder to update LATEST_REVISION when adding new migrations.