跳到主要內容

MongoDB 2.2 新功能 存活時間 TTL 用法

MongoDB 在 8/29/2012 發佈 2.2 版本,其中有一項功能我很期待,就是存活時間 (TTL, Time to live),以下整理文件的內容:


基本運作
MongoDB 透過 mongod 背景處理過期的資料,頻率為一分鐘一次。在建立索引時(ensureIndex)加入 expireAfterSeconds 選項與秒數就可以完成 TTL 設定。

限制
  • 索引欄位必須為 BSON 的時間格式,如果不是時間格式,TTL 就無效。
  • _id 欄位不能設定為 TTL 的時間索引欄位。(這有點可惜,ObjectID 本身既有時間紀錄在裡面,還需要再指定一個時間欄位有點多餘…)
  • 如果時間欄位是陣列(array)包含多個時間值,則以最近的時間為基準設定。
  • 不可以在 Capped Collections 設定 TTL,因為 Capped Collections 格式的資料本身就無法刪除。
  • 在某些情況下,過期的資料還會存在,直到下一個 mongod 定期的刪除循環止。

設定
假設有一 Collection 名稱為 "forgetpwd",存活時間為 1800 秒,建立 TTL 索引時可以用以下設定:
db.forgetpwd.ensureIndex({'date': 1}, {expireAfterSeconds: 1800})
建立資料:
db.forgetpwd.save({'user': 'toomore', 'date': New Date()})
建立資料後,該筆資料就會以 date 欄位的時間 + 1800 秒後刪除。以上的範例可以實作在使用者忘記密碼的流程裡:使用者使用忘記密碼時,請求一個有時效的重新設定密碼連結,在限定時間內設定新密碼,否則取消請求連結

以上為 MongoDB TTL 的用法。

留言

show