Един от често срещаните сценарии при работа с база данни е автоматичното изрязване на някои таблици въз основа на времето. Например, може да имате таблица със работни места за проследяване на фонови задачи във вашия продукт и искате да запазите работни места само за последния час. Начинът, по който обикновено се прилага, е, че в крайна сметка пишете процес на демон, който се изпълнява периодично и събира вашите таблици за боклук. Като се има предвид, че това е толкова често срещан процес, хората в MongoDB са вградили тази функционалност в базата данни, която може да бъде използвана във вашите внедрявания на MongoDB! Нарича се „TTL индекси“. Ето как можете да използвате TTL индекси в две прости стъпки:
-
Стъпка 1:Добавете поле за дата
Добавете поле за дата към вашия документ, за да посочите възрастта на документа. MongoDB ще използва това поле, за да определи дали вашият документ е изтекъл и трябва да бъде премахнат. Ако искате да запазите документа по-дълго, просто актуализирайте този документ с актуализирана дата. В примера по-долу добавих поле „creationTime“ към колекцията си от работни места:
db.jobs.insert( { "name" : testjob "creationTime": new Date('Oct 30, 2013: 11:00:00'), "type": 2, } )
-
Стъпка 2:Добавете TTL индекс
Добавете TTL индекс към вашата колекция в това поле. В този пример по-долу ще използваме стойност expireAfterSeconds от 3600. Това ще изтече работните места след всеки час:
db.jobs.ensureIndex( { "creationTime": 1 }, { expireAfterSeconds: 3600 } )
Демонът TTL се изпълнява на всеки 60 секунди, така че документът ви ще бъде изтрит в рамките на приблизително 60 секунди след изтичане. Друго предимство на TTL индексите е, че те също се държат като нормални индекси – така че можете да правите заявка в полето за дата и планът на заявката ще използва индекса. За повече подробности вижте документацията на MongoDB за TTL индексите.