【问题标题】:Setting expiry time for a collection-property in mongoose (mongodb)在 mongoose (mongodb) 中设置集合属性的到期时间
【发布时间】:2018-01-16 01:56:00
【问题描述】:

我知道,如果我想使用 expires 属性为一个集合设置过期时间,如下所示:

new Schema({
  token: {
    type: String,
    required: true
  },
  createdAt: {
    type: Date,
    expires: '10s',
    default: Date.now
  }
});

但是,如何为集合中的一个属性设置过期时间?

例如,我有一个包含用户名、电子邮件和一组身份验证令牌的架构。我希望在 10 秒后从创建日期删除每个令牌。我试过了:

new Schema({
  username: {
    type: String,
    required: true
  },
  email: {
    type: String,
    required: true
  },
  tokens: [{
    createdAt: {
      type: Date,
      expires: '10s',
      default: Date.now
    },
    auth: {
      type: String,
      required: true
    },
    token: {
      type: String,
      required: true
    }
  }]
});

但是每次都会删除整个集合,而不是token对象。

【问题讨论】:

    标签: node.js mongodb mongoose mongoose-schema


    【解决方案1】:

    您可以创建一个单独的集合来保存身份验证令牌,并在用户和令牌集合之间保持一对多的关系。

    您可以使用pre/post 中间件级联insert/update/delete,因此当令牌过期时,用户中的令牌取消引用

    用户架构

     const UserSchema =  new Schema({
        username: {
          type: String,
          required: true
        },
        email: {
          type: String,
          required: true
        },    
        tokens: [
           { type: Schema.Types.ObjectId, ref: 'Token' }
          ]    
      });
    

    令牌架构(确保您已在 createdAt 上创建了 ttl 索引)

      const TokenSchma = new Schema({
          user : { 
            type: Schema.Types.ObjectId, ref: 'User' 
          },
          createdAt: {
            type: Date,
            expires: '10s',
            default: Date.now
          },
          auth: {
            type: String,
            required: true
          },
          token: {
            type: String,
            required: true
          }
        }
    );
    

    【讨论】:

    • 是的,但是从用户那里取消引用令牌的 remove-middleware 不起作用。当时间到期时,中间件不会被触发(在 github 网站上已经有一个来自 mongoose 的问题)。
    • 在这种情况下,我们可以从用户中删除令牌引用,只需在令牌中有一个对用户的引用
    猜你喜欢
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    • 2013-07-30
    相关资源
    最近更新 更多