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分钟后才会从数据库中删除的。设置其他不为整数分钟的时间时,也会有相应的误差。

你可能感兴趣的:(MongoDB,Mongoose,TTL,过期自动删除)