0

We currently have a ttl index on a timestamp in MongoDB.

Before we had an ttl expireAfterSeconds : 604800 seconds -> 1 week of documents.

A few weeks ago we change this to a TTL index of 31536000 seconds -> 365 days.

But MongoDB still removes documents after 7 days instead of 365.

  • MongoDB version: 4.2.18
  • MongoDB running hosted Atlas / AWS

Indexes in database:

  {
    v: 2,
    key: { _id: 1 },
    name: '_id_',
    ns: '<DB>.<COLLECTION>'
  },
  {
    v: 2,
    key: { id: 1, ts: 1 },
    name: 'id_1_ts_1',
    ns: '<DB>.<COLLECTION>
  },
  {
    v: 2,
    key: { ts: 1 },
    name: 'ts_1',
    ns: '<DB>.<COLLECTION>',
    expireAfterSeconds: 31536000
  }
]

We have an environmental variable to set the TTL index on each start of the application, the code to set the ttl index looks like this:

      await collection.createIndex(
        { ts: 1 },
        {
          expireAfterSeconds: ENV.<Number>
        }
      );
    } catch (e) {
      if ((e as any).codeName == "IndexOptionsConflict") {
        await collection.dropIndex("ts_1");
        await collection.createIndex(
          { ts: 1 },
          {
            expireAfterSeconds: ENV.<Number>
          }
        );
      }
    }

as seen from the indexes, the TTL index should remove documents after one year? Why does it behave like this? Any insights?

Villeviktor
  • 101
  • 1
  • 5

1 Answers1

-1

I would look into the collMod command