mongodb索引 過期索引


過期索引,指的是一段時間后會過期的索引,在索引過期后,相應的數據會被刪除,這適合存儲一些在一段時間之后會失效的數據,比如用戶的登錄信息,想要用戶登錄信息2天后失效,需要用戶重新登錄,或者存儲的日志,希望這些日志在一段時間后刪除

 

建立方法
> db.test2.ensureIndex({time:1},{expireAfterSeconds:30})
{
    "createdCollectionAutomatically" : false,
    "numIndexesBefore" : 4,
    "numIndexesAfter" : 5,
    "ok" : 1
}
與普通索引不同的是,后面需要加個參數,expireAfterSecondes,他的值是秒數,用來設置過期索引的過期時間

 

建立好后,我們插入一條數據
> db.test2.insert({time:new Date()})
WriteResult({ "nInserted" : 1 })
再查詢
> db.test2.find()
{ "_id" : ObjectId("5b60e31524326393d99a4f64"), "x" : 1 }
{ "_id" : ObjectId("5b6235d23fb2bed9140233fd"), "x" : 1, "y" : 2, "z" : 3 }
{ "_id" : ObjectId("5b62361e3fb2bed9140233fe"), "x" : [ 1, 2, 3, 4, 5 ] }
{ "_id" : ObjectId("5b623a513fb2bed9140233ff"), "time" : ISODate("2018-08-01T22:55:13.369Z") }

 

按照之前的設置,這條數據會在30s后刪除,我們等待30s后,再看這條數據
> db.test2.find()
{ "_id" : ObjectId("5b60e31524326393d99a4f64"), "x" : 1 }
{ "_id" : ObjectId("5b6235d23fb2bed9140233fd"), "x" : 1, "y" : 2, "z" : 3 }
{ "_id" : ObjectId("5b62361e3fb2bed9140233fe"), "x" : [ 1, 2, 3, 4, 5 ] }
發現那條插入時間的數據已經不見了

 

過期索引的限制
1、存儲在過期索引字段的值必須是指定的時間類型
  說明:比如是ISODate或者ISODate數組,不能使用時間戳,否者不能被自動刪除
     比如> db.test2.insert({time:1}),這種是不能被刪除的
2、如果指定了ISODate()數組,則按照最小的時間進行刪除。
3、過期索引不能是復合索引,因為我們不能指定兩個過期時間索引
4、刪除時間不是精確的
  說明:刪除過程是由后台程序每60s跑一次,而且刪除也需要一些時間,索引存在誤差

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM