diff --git a/src/database/mongo.js b/src/database/mongo.js index 4e2ba46a66..4179111812 100644 --- a/src/database/mongo.js +++ b/src/database/mongo.js @@ -87,9 +87,13 @@ mongoModule.createIndices = async function () { await collection.createIndex({ _key: 1, score: -1 }, { background: true }); await collection.createIndex({ _key: 1, value: -1 }, { background: true, unique: true, sparse: true }); await collection.createIndex( - { members: 1, _key: 1}, { background: true, partialFilterExpression: { members: { $exists: true } } } + { members: 1, _key: 1}, + { background: true, partialFilterExpression: { members: { $exists: true } } } + ); + await collection.createIndex( + { expireAt: 1 }, + { expireAfterSeconds: 0, background: true, partialFilterExpression: { expireAt: { $exists: true } } }, ); - await collection.createIndex({ expireAt: 1 }, { expireAfterSeconds: 0, background: true }); winston.info('[database] Checking database indices done!'); }; diff --git a/src/upgrades/4.11.0/expireAt-partial-index.js b/src/upgrades/4.11.0/expireAt-partial-index.js new file mode 100644 index 0000000000..6c47911c06 --- /dev/null +++ b/src/upgrades/4.11.0/expireAt-partial-index.js @@ -0,0 +1,26 @@ +'use strict'; + + +const db = module.parent.require('./database'); + +module.exports = { + name: 'Change expireAt index to partial index', + timestamp: Date.UTC(2026, 3, 3), + method: async function () { + const nconf = require.main.require('nconf'); + const isMongo = nconf.get('database') === 'mongo'; + if (!isMongo) { + return; + } + await db.client.collection('objects').dropIndex('expireAt_1'); + await db.client.collection('objects').createIndex( + { expireAt: 1 }, + { + expireAfterSeconds: 0, + background: true, + partialFilterExpression: { expireAt: { $exists: true } }, + }, + ); + }, +}; +