Для каждого документа вы можете установить поле expires
и создать следующий индекс:
db.docs.createIndex( { expires:1 }, {expireAfterSeconds: 0 } );
документы внутри этой коллекции будут удалены после того, как время превысит поле с истекшим сроком. Однако это может занять до 60 секунд, так как фоновая задача, выполняемая для удаления документов, выполняется каждые 60 секунд.
Вот пример, хотя ...
Итак, давайте вставим пакет документов, добавив 60 секунд к каждому документу каждый раз, когда мы их добавляем.
> var expires = new Date(); // Gets the current datetime.
> expires.setSeconds(expires.getSeconds() + 60)
1587812623023
> db.docs.insert({expires})
WriteResult({ "nInserted" : 1 })
> expires.setSeconds(expires.getSeconds() + 60)
1587812683023
> db.docs.insert({expires})
WriteResult({ "nInserted" : 1 })
> expires.setSeconds(expires.getSeconds() + 60)
1587812743023
> db.docs.insert({expires})
WriteResult({ "nInserted" : 1 })
> db.docs.find()
{ "_id" : ObjectId("5ea418de00f07c4d6461090b"), "expires" : ISODate("2020-04-25T11:03:43.023Z") }
{ "_id" : ObjectId("5ea418e300f07c4d6461090c"), "expires" : ISODate("2020-04-25T11:04:43.023Z") }
{ "_id" : ObjectId("5ea418e600f07c4d6461090d"), "expires" : ISODate("2020-04-25T11:05:43.023Z") }
Теперь, если мы добавим индекс TTL.
db.docs.createIndex( { expires:1 }, { expireAfterSeconds: 0 } )
Затем мы можем отслеживать нашу коллекцию каждые 60 секунд и видеть, как каждый документ получает удалено.
> new Date()
ISODate("2020-04-25T11:03:28.278Z")
> db.docs.find()
{ "_id" : ObjectId("5ea418de00f07c4d6461090b"), "expires" : ISODate("2020-04-25T11:03:43.023Z") }
{ "_id" : ObjectId("5ea418e300f07c4d6461090c"), "expires" : ISODate("2020-04-25T11:04:43.023Z") }
{ "_id" : ObjectId("5ea418e600f07c4d6461090d"), "expires" : ISODate("2020-04-25T11:05:43.023Z") }
Ничего еще не удалено.
> new Date()
ISODate("2020-04-25T11:04:18.652Z")
> db.docs.find()
{ "_id" : ObjectId("5ea418e300f07c4d6461090c"), "expires" : ISODate("2020-04-25T11:04:43.023Z") }
{ "_id" : ObjectId("5ea418e600f07c4d6461090d"), "expires" : ISODate("2020-04-25T11:05:43.023Z") }
Один документ пропал.
> new Date()
ISODate("2020-04-25T11:05:17.705Z")
> db.docs.find()
{ "_id" : ObjectId("5ea418e600f07c4d6461090d"), "expires" : ISODate("2020-04-25T11:05:43.023Z") }
Другой пропал.
> new Date()
ISODate("2020-04-25T11:06:31.390Z")
> db.docs.find()
>
и в нашей коллекции нет никаких украшений.