Mongoose 設置TTL(time to live) 過期自動刪除數據

最近忙好忙。。。沒什麼時間積累,今天抽空趕緊隨手記一個新操作

什麼是TTL

TTL(time to live) 集合支持mongodb對存儲的數據進行失效時間設置,經過指定的時間段後、或在指定的時間點過期,集合自動被mongod清除。這一特性有利於對一些只需要保存一定時間的數據信息進行存儲,比如機器產生的事件數據、日誌、會話信息等。

簡單場景

比如用戶的驗證碼,生成後需要存在數據庫的verifyCode表裏,並且發給用戶,用戶填入提交後取出來對比是否一致。

這種驗證碼只會用一次,而且會要求幾分鐘後失效,不需要長時間存在庫裏,這時候就可以使用TTL

例子

export default app => {
  const mongoose = app.mongoose;
  const Schema = mongoose.Schema;

  const VerifyCodeSchema = new Schema(
    {
      value: { type: String, unique: true }, // 驗證碼值
      type: { type: String, enum: ['email'] }, // 驗證碼類型
      operation: { type: String, enum: ['login'] }, // 操作類型
      account: { type: String },
      createdAt: { type: Date, default: Date.now, index: { expires: 300 } }, // 設置ttl, 5m後失效自動刪除
    },
    {
      usePushEach: true,
    },
  );

  return mongoose.model('verifyCode', VerifyCodeSchema);
};

注意

MongoDB 的TTL是每隔1分鐘檢查一次,所以如果設置 expires: 20,即20秒後失效,那麼實際上也是1分鐘後纔會從數據庫中刪除的。設置其他不爲整數分鐘的時間時,也會有相應的誤差。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章