15

I couldn't find in any of the Spring-Data documents, what is the way to assign expiration time to a document in MongoDB?

Cœur
  • 37,241
  • 25
  • 195
  • 267
ArsenalFan
  • 151
  • 1
  • 1
  • 4

2 Answers2

24

You can do it using @Indexed annotation's expireAfterSeconds attribute over a field whose type is Date.Roughly:

@Document
public class SomeEntity {

    String id;

    @Field
    @Indexed(name="someDateFieldIndex", expireAfterSeconds=3600)
    Date someDateField;

   // rest of code here

}

Or by manipulating a MongoTemplate:

mongoTemplate
    .indexOps(SomeEntity.class)
    .ensureIndex(new Index().on("someDateField", Sort.Direction.ASC).expire(3600));
Ori Dar
  • 18,687
  • 5
  • 58
  • 72
2

Thanks, but does the whole document is expired and deleted or just the field?

According to the MongoDB Documentation https://docs.mongodb.com/manual/core/index-ttl/ The TTL index is used to remove documents from a collection.

So, the entire document will be deleted and not uniquely the field indexed.

Nb : The index has to be positioned on a Date Field, else the TTL will not be apply

regards

mca
  • 85
  • 1
  • 9