我想在我的应用程序上创建一个用户帐户,如果该用户尚未确认其帐户,请在经过一定时间后将该用户删除,如果该用户已确认其帐户,则将TTL关闭。
这是我的架构:
const mongoose = require('mongoose')
const Schema = mongoose.Schema
const UserSchema = new Schema({
name: {
type: String,
required: true
},
email: {
type: String,
required: true
},
password: {
type: String,
required: true
}
,
isConfirmed: {
type: Boolean
},
code: {
type: String
},
createdAt: {
type: Date,
expires: 3600,
default: Date.now
}
})
module.exports = User = mongoose.model('users', UserSchema)
答案 0 :(得分:1)
由于您已经在TTL index
字段中添加了createdAt
,因此可以通过在成功进行帐户确认时删除createdAt
字段来轻松地将其关闭。
如果文档具有createdAt
值且早于指定时间,则将其删除。但是,如果您在帐户确认时删除该字段,则不会删除该字段。因此,您需要删除帐户确认中的createdAt
字段。
如果您想保留createdAt
字段,则可以在TTL index
之类的某些临时字段上添加expireAfter
,并在帐户确认时将其删除。
expireAfter: {
type: Date,
expires: 3600,
default: Date.now
}
帐户确认后。
User.findOneAndUpdate({_id : user_id},{$unset : {expireAfter:1}})
摘自官方文档:
MongoDB将自动从 文档的createdAt值早于 在expireAfterSeconds中指定的秒数(在您的情况下为
expires
)。
有关更多信息,请阅读MongoDB TTL index docs