I will still have to delete the aggregates that have expired due to idle expiry (e.g., no activity has touched this aggregate for 15min). I can't control idle expiry with TTLs because when TTLs expire it just looks like the stuff never existed. I need to know that there was a previously active aggregate because that tells me there are aggregated entities that need to be deleted.

I can't delete aggregated entities with TTL because they are all written at different times. If I put a TTL of 15min on that, then entities will start disappearing from the aggregate if it lives longer than 15min.

If I put a TTL at the max expiry time, then it will just ensure that aggregates that are activated then never touched again will eventually go away.