这是我的
schema
我想在 5 分钟后自动使该字段过期。我该怎么做?
const userRegistrationSchema = new mongoose.Schema({
mobile: {
type: Number, trim: true,
},
email: {
type: String, lowercase: true, trim: true
},
// email Varification
verified: {
type: Boolean,
},
otp: {
type: Number,
},
password: {
type: String, trim: true,
},
confirmPassword: {
type: String, trim: true,
},
如果用户输入此值并像这样进行 otp 存储
mobile: 9561300851
email: "[email protected]"
verified: false
otp: 8236
5 分钟后我希望我的数据看起来像 otp 字段
mobile: 9561300851
email: "[email protected]"
verified: false
我希望我已经解释了我的问题以及如何做。
MongoDB 仅支持使用 TTL 在一定时间后删除文档。但是,对于字段删除,您可以在使用 OTP 后使用 $unset 删除字段。
https://www.mongodb.com/docs/manual/reference/operator/update/unset/
或者,您可以创建调度程序,该调度程序将在一定时间后运行,并使用 $unset 删除所有使用的 OTP 字段。
AFAIK MongoDB 仅支持文档上的 TTL,而不支持字段上的 TTL:https://www.mongodb.com/docs/manual/core/index-ttl/
您可以考虑创建一个单独的 OTP 模式,其 TTL 索引为 5 分钟。相关的 Mongoose 文档可以在这里找到: https://mongoosejs.com/docs/api.html#schemadateoptions_SchemaDateOptions-expires
const otpSchema = new mongoose.Schema({ 电话:字符串, otp:字符串, createAt: { type: Date, expires: 600, default: Date.now } // 10 分钟后过期 });
您可以在架构中添加过期时间