gpt4 book ai didi

javascript - 如何使用 mongoose 打开和关闭 TTL 索引?

转载 作者:行者123 更新时间:2023-12-02 23:19:37 25 4
gpt4 key购买 nike

我想在我的应用上创建一个用户帐户,如果该用户未确认其帐户,则在一段时间后删除该用户;如果用户已确认其帐户,则关闭 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)

最佳答案

由于您已经在 createdAt 字段添加了 TTL 索引,因此您可以通过在成功确认账户时删除 createdAt 字段来轻松关闭它.

如果文档具有 createdAt 值并且早于指定时间,则它将被删除。但是,如果您在帐户确认时删除该字段,则它不会被删除。因此,您需要删除帐户确认时的 createdAt 字段。

如果您想保留createdAt字段,您可以在一些临时字段(例如expireAfter)上添加TTL索引,并在帐户确认时将其删除。

  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 index docs

关于javascript - 如何使用 mongoose 打开和关闭 TTL 索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57003289/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com