Я хочу создать учетную запись пользователя в своем приложении и удалить этого пользователя через определенный промежуток времени, если этот пользователь не подтвердил свою учетную запись, и отключить 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)


![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Поскольку вы уже добавили 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 will automatically delete documents from the collection when the document’s createdAt value is older than the number of seconds specified in expireAfterSeconds (in your case
expires).
Для получения дополнительной информации прочитайте Документы индекса MongoDB TTL