如何在mongoDB上5m后自动删除该字段? mongodb、猫鼬、架构

问题描述 投票:0回答:3

这是我的

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

我希望我已经解释了我的问题以及如何做。

javascript node.js mongodb mongoose
3个回答
1
投票

MongoDB 仅支持使用 TTL 在一定时间后删除文档。但是,对于字段删除,您可以在使用 OTP 后使用 $unset 删除字段。

https://www.mongodb.com/docs/manual/reference/operator/update/unset/

或者,您可以创建调度程序,该调度程序将在一定时间后运行,并使用 $unset 删除所有使用的 OTP 字段。


0
投票

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


0
投票

const otpSchema = new mongoose.Schema({ 电话:字符串, otp:字符串, createAt: { type: Date, expires: 600, default: Date.now } // 10 分钟后过期 });

您可以在架构中添加过期时间

© www.soinside.com 2019 - 2024. All rights reserved.