I am deciding whether to auto delete expired documents via the TTL index or to have a background process that checks every 24 hours.
I have read that the TTL index will check every x milliseconds, etc.
If that is the case, does this mean that it is a costly index?
This questions answer is a semantic, but in general I would recommend using 1.
the deletion process uses the TTL index to fetch expired documents, so it basically executes an index scan every 60seconds which is not too expensive especially if there are no matches.
Now due to your comment it seems like you don't mind having "live" documents that are supposed to be deleted for some time, which allows you to do a daily cleanup instead, Because of this there are some semantics to consider.
If your DB has certain hours where it's very loaded, and for example at night time it's not... AND many documents would get deleted throughout high load times by the TTL index then I would consider using a managed process instead. As then you can manage the load better. At the end of the day deleting a document is a somewhat "expensive" operation.
With all that said the cleanup process runs as background task which has lower priority, so in theory it should self manage even on high load times.
I'm assuming this is not your case as it's very specific therefor I would use the TTL index.