Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring Data MongoDB how to assign expiration time programmatically

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

like image 226
ArsenalFan Avatar asked May 14 '17 16:05

ArsenalFan


2 Answers

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));
like image 70
Ori Dar Avatar answered Oct 11 '22 04:10

Ori Dar


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

like image 2
mca Avatar answered Oct 11 '22 06:10

mca