我知道,如果我想设置一个具有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
}
}]
});
但每次删除完整的集合时,都不会删除令牌对象。
答案 0 :(得分:0)
您可以创建一个单独的集合来保存身份验证令牌,并维护用户和令牌集合之间的一对多关系。
您可以使用insert/update/delete
中间件级联pre/post
,因此当令牌过期时,用户中的de-reference令牌
用户架构
const UserSchema = new Schema({
username: {
type: String,
required: true
},
email: {
type: String,
required: true
},
tokens: [
{ type: Schema.Types.ObjectId, ref: 'Token' }
]
});
令牌架构(确保您已在ttl
上创建了createdAt
索引)
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
}
}
);