我有像猫头鹰一样的用户mongoose Schema
const userSchema = new mongoose.Schema({
login: {
type: String
},
email: {
type: String
},
password: {
type: String
},
tokens: [
{
access: {
type: String
},
token: {
type: String,
}
}
],
});
我希望在一段时间后删除单个令牌对象,例如30秒。如果我添加带有expires属性的createAt字段
tokens: [
{
access: {
type: String,
required: true,
},
token: {
type: String,
required: true,
},
createdAt: {type:Date,default:Date.now,expires:10}
}
],
然后结果:删除所有文档。有办法做我想做的事吗?
答案 0 :(得分:0)
你可以使用post save钩子来做到这一点。 首先为令牌创建childSchema:
ChildTokenSchema = new mongoose.Schema( {
access: {
type: String,
required: true,
},
token: {
type: String,
required: true,
},
createdAt: {type:Date,default:Date.now,expires:10}
});
使用setTimeout:
在childModel上添加一个post-save挂钩ChildTokenSchema.post('save', function(doc) {
if (doc.createdAt && doc.createdAt.expires ) {
setTimeout(doc.remove(), doc.createdAt.expires * 1000)
}
});
修改您的父模式:
....
....
tokens: [ChildTokenSchema]
....