你好,我想删除新用户从mongoDB atlas在2分钟内,如果他们不验证自己的电话号码,我认为TTL的方式

lkaoscv7  于 2022-12-03  发布在  Go
关注(0)|答案(1)|浏览(92)

文档架构

这是我的用户模式,isVerified字段保存到DB中,初始值为if false,过程是用户输入其电话号码,然后我通过SMS发送电话号码的验证令牌,并将令牌和号码保存在DB中,然后当用户输入他已接收到的验证令牌时,将isVerified字段修补为true。现在我想删除每一个文档,不转isVerified到true在2分钟内的文档创建。我已经看到了一些代码示例,但老实说,我不知道如何或在哪里实现这个功能,它应该在模式中还是在文档创建过程中?
由于我不知道从哪里开始或如何开始,我还没有尝试过

raogr8fs

raogr8fs1#

MongoDB支持TTL Indexes,因此我建议如下
1.在方案中添加可选字段verificationTimeout。对于每个新创建的用户,将此值设置为当前时间戳
1.使用您自己选择的expireAfterSeconds在此字段上创建TLL索引(顺便说一句,2分钟真的很短,我建议15分钟左右...)
1.验证用户后,从文档中 * 删除 * verificationTimeout字段
或者,您也可以将verificationTimeout设置为要删除未验证用户的时间戳,并使用expireAfterSeconds: 1在设置的定义时间戳处删除用户。
因此,如果用户没有在给定的时间段内验证,mongodb服务器将使文档无效并将其从集合中删除。但是如docs中所指定的,如果文档不包含指定的字段,* 不会 * 使文档无效。因此,如果您在验证时删除verificationTimeout,用户不会从集合中删除。
这件事的好处是:你不需要关心删除你自己代码中未验证的用户。你唯一需要做的就是创建索引并设置/删除值。也就是说,没有额外的工作人员扫描元素并检查它们是否已经过期...

相关问题