--- indexes: # Indexes for the user collection - collection: users type: users # index applies to users database index: name: users unique: true key: username: 1 - collection: users type: users # index applies to users database index: name: show_new key: created: -1 # Indexes for the addresses collection - collection: addresses type: users # index applies to users database index: name: address unique: true key: address: 1 - collection: addresses type: users # index applies to users database index: name: user key: user: 1 # Indexes for the mailboxes collection - collection: mailboxes index: name: find_by_user key: user: 1 path: 1 - collection: mailboxes index: name: user_subscribed key: user: 1 subscribed: 1 - collection: mailboxes index: name: find_by_type key: user: 1 specialUse: 1 # Indexes for the messages collection - collection: messages index: name: user_messages_by_thread key: user: 1 thread: 1 - collection: messages index: # use also as sharding key name: mailbox_uid key: mailbox: 1 uid: 1 - collection: messages index: # several message related queries include the shard key values name: mailbox_uid_shard key: _id: 1 mailbox: 1 uid: 1 - collection: messages index: name: newer_first key: mailbox: 1 uid: -1 - collection: messages index: name: mailbox_modseq_uid key: mailbox: 1 modseq: 1 uid: 1 - collection: messages index: name: mailbox_flags key: mailbox: 1 flags: 1 - collection: messages index: name: by_modseq key: mailbox: 1 modseq: 1 - collection: messages index: name: by_idate key: mailbox: 1 idate: 1 _id: 1 - collection: messages index: name: by_idate_newer key: mailbox: 1 idate: -1 _id: -1 - collection: messages index: name: by_hdate key: mailbox: 1 hdate: 1 msgid: 1 - collection: messages index: name: by_size key: mailbox: 1 size: 1 - collection: messages index: name: by_headers key: mailbox: 1 headers.key: 1 headers.value: 1 - collection: messages index: # there can be only one $text index per collection name: fulltext key: user: 1 subject: text text: text weights: subject: 10 text: 5 - collection: messages index: # in most cases we only care about unseen, not seen messages name: mailbox_unseen_flag key: mailbox: 1 unseen: 1 - collection: messages index: # some mail agents list messages that do not have the \Deleted flag set name: mailbox_undeleted_flag key: mailbox: 1 undeleted: 1 - collection: messages index: name: mailbox_flagged_flag key: mailbox: 1 flagged: 1 - collection: messages index: name: mailbox_draft_flag key: mailbox: 1 draft: 1 - collection: messages index: name: has_attachment key: mailbox: 1 ha: 1 - collection: messages index: # This filter finds all messages that are expired and must be deleted. # Not sure about performance though as it is a global query name: retention_time partialFilterExpression: exp: true key: exp: 1 rdate: 1 # Indexes for the attachments collection # attachments.files collection should be sharded by _id (hash) # attachments.chunks collection should be sharded by files_id (hash) - collection: attachments.files type: gridfs # index applies to gridfs database index: name: attachment_hash key: metadata.h: hashed - collection: attachments.files type: gridfs # index applies to gridfs database index: name: related_attachments key: metadata.c: 1 metadata.m: 1 - collection: attachments.chunks type: gridfs # index applies to gridfs database index: # hashed index needed for sharding name: chunks_shard key: files_id: hashed # Indexes for the journal collection - collection: journal index: # this index is used to apply changes in a mailbox for IMAP session name: mailbox_modseq key: mailbox: 1 modseq: 1 - collection: journal index: # this index is used to send updates to a logged in webmail user name: user_limit_id key: user: 1 _id: 1 - collection: journal index: # this index is used to find the latest journal entry name: user_limit_id_reverse key: user: 1 _id: -1 - collection: journal # delete journal entries after 3 hours index: name: journal_autoexpire expireAfterSeconds: 10800 key: created: 1 # Indexes for the threads collection - collection: threads index: name: thread_shard key: user: hashed - collection: threads index: name: thread key: user: 1 ids: 1 - collection: threads index: name: threa_autoexpire # autoremove thread indexes after 180 days of inactivity expireAfterSeconds: 15552000 key: updated: 1