Ett av de vanligaste scenarierna när man arbetar med en databas är att automatiskt beskära vissa tabeller baserat på tid. Till exempel kan du ha en jobbtabell för att spåra bakgrundsjobb i din produkt och du vill bara behålla jobb under den senaste timmen. Hur det vanligtvis implementeras är att det slutar med att du skriver en demonprocess som körs med jämna mellanrum och skräpsamlar dina tabeller. Med tanke på att detta är en så vanlig process, har folket på MongoDB byggt in den här funktionen i databasen som kan utnyttjas i dina MongoDB-installationer! Det kallas "TTL-index". Så här kan du använda TTL-index i två enkla steg:
-
Steg 1:Lägg till ett datumfält
Lägg till ett datumfält i ditt dokument för att ange dokumentets ålder. MongoDB kommer att använda detta fält för att avgöra om ditt dokument har upphört att gälla och måste tas bort. Om du vill behålla dokumentet längre, uppdatera bara detta dokument med ett uppdaterat datum. I exemplet nedan har jag lagt till ett "creationTime"-fält till min jobbsamling:
db.jobs.insert( { "name" : testjob "creationTime": new Date('Oct 30, 2013: 11:00:00'), "type": 2, } )
-
Steg 2:Lägg till ett TTL-index
Lägg till ett TTL-index till din samling i det här fältet. I det här exemplet nedan använder vi ett expireAfterSeconds-värde på 3600. Detta kommer att förfalla jobb efter varje timme:
db.jobs.ensureIndex( { "creationTime": 1 }, { expireAfterSeconds: 3600 } )
TTL-demonen körs var 60:e sekund, så ditt dokument tas bort inom cirka 60 sekunder efter utgången. En annan fördel med TTL-index är att de också beter sig som vanliga index – så att du kan fråga i datumfältet och frågeplanen kommer att använda indexet. För mer information, se MongoDB-dokumentationen om TTL-index.