搜索

首页  >  问答  >  正文

node.js - mongo TTL 数据过期不删除

使用 mongoose 可以成功为某个 document 添加过期时间:

但是,数据在设置的过期时间之后仍然没有删除,官方的文档说mongo后台服务每隔一分钟轮询一次过期设置,但这已经不是几分钟延迟的事了,感觉上是expire没有生效的

伊谢尔伦伊谢尔伦2748 天前1060

全部回复(3)我来回复

  • 漂亮男人

    漂亮男人2017-05-17 09:58:31

    这个问题我自己解决了,重新看了下官方文档 https://docs.mongodb.com/manu...

    schema定义的索引必须与实际的数据相对应。

                 let myschema = new mongoose.Schema(
                    {
                        phone: {
                            type: String,
                            required: true
                        },
                        code: {
                            type: String,
                            required: true
                        },
                        createAt: {
                            type: Date,
                            default: Date.now(),
                            index: { expires: 60*1 } //设置验证码的有效时间为 10 分钟
                        }
                    }, {collection: 'sms'}
                );
                let MyModel = db.model('MyModel', myschema);
                let arr = {
                    phone: req.body.phone,
                    code: code,
                    createAt: Date.now()
                }  

    schema 中的 createAt 必须与 arr 中的 createAt 对应,且必须给定时间,这样才会生效。

    回复
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-17 09:58:31

    let mySchema = new mongoose.Schema(...)试试?

    回复
    0
  • 大家讲道理

    大家讲道理2017-05-17 09:58:31

    几点建议:

    1、先检查一下索引的实际TTL情况;您贴出来的部分,感觉上面代码和下面的截图不一致

    2、看看server.Status中的ttl的部分

    db.serverStatus().metrics.ttl

    供参考。

    Love MongoDB!Have fun!

    回复
    0
  • 取消回复