Search code examples
mongodbmongodb-queryttlmongodb-indexesmongodb-update

MongoDB - Updating TTL Index value


I'm trying to update the value of the expiry date in a document. Here's the Node.js code I use to set the index everytime I want to update the document:

database.collection(collectionName).createIndex({ "expires_on": 1 }, { expireAfterSeconds: 0 })
database.collection(collectionName).updateOne(query, update, { upsert: true }, (error, result) => {...})

The thing is that I set the expires_on date to the date of tomorrow and the value is set correctly in database but it expires within a few seconds. Is there a problem with the way I'm updating this field? I don't know how I can update this document in a way that it would expire on the last expires_on date it has been updated for.

I have noticed that you can't update the indexes in MongoDB but am I updating the index here? Isn't it different when I try to change the value, not the index itself?


Solution

  • The fact I was creating an index every time a new data was inserted was not logical. I set the index in my database once and only updated the document each time:

    database.collection(collectionName).updateOne(query, update, { upsert: true }, (error, result) => {...})
    

    However, the problem turned out to be the value I set for the expires_on in my code. Due to the asynchronicity of Node.js, the value wasn't calculated correctly.