设置文档node.js mongodb的过期时间



所以我知道在mongo中有一种叫做TTL的东西,但我不认为它会为我想做的工作,我想从我的模式中设置一个文档,默认值是基本的,但是当客户支付他的会员资格时,我想将其设置为"我在我的控制器中做了那个查询,但我想知道是否有一种方法使这个文档的值为& & &;要设置一个过期时间,如1周或1个月,当时间到期时将其设置为基本时间,有模式

const UserSchema = new Schema({
username: {type: String, required: true},
nombre_empresa: {type: String},
email: {type: String, required: true, unique: true},
password: {type: String, required: true},
tipo_cuenta: {type: String, required: true},
isNewUser: {type: String, default: 'basic'}
},
{
timestamps: true
},
{ 
typeKey: '$type' 
});

和这里的过程当我改变他的状态

userCtrl.renderMembershipSucess = async (req, res) => {
const status = 'plus'
const status_basic = 'basico'
const status_user = await User.findByIdAndUpdate(
req.user.id, {
$set: { isNewUser: status }
}
)
console.log(status_user)
res.render('users/sucess')
}

与其依赖于必须触发并正确更新用户记录的触发器,不如存储过期并在确定用户是否为plus时检查它。

例如,您可以将plusExpires字段添加到用户模式中,默认值为null。当您将用户升级为plus时,将plusExpires设置为不再有效的日期。

在模式中添加一个实例方法来执行检查:

UserSchema.methods.isPlus = function() {
return this.isNewUser == "plus" && (( this.plusExpires == null ) || (this.plusExpires > new Date())
}

然后任何时候你需要测试一个用户是否为+,只需调用用户对象上的User.isPlus()

我不认为mongodb提供了一个内置的方法来做你想做的事情,但是你可以每天午夜运行一个cronjob来获取你的"+";客户,检查他们的会员资格,并在必要时更新。

另一种方法可能是设计你的mongodb集合来利用TTL,你可以分离用户和PlusMembership集合,当用户付款时,插入一个PlusMembership数据与TTL

相关内容

  • 没有找到相关文章

最新更新