搜尋

首頁  >  問答  >  主體

node.js - mongo TTL 資料過期不刪除

使用 mongoose 可以成功為某個 document 新增過期時間:

#但是,資料在設定的過期時間之後仍然沒有刪除,官方的文檔說mongo後台服務每隔一分鐘輪詢一次過期設置,但這已經不是幾分鐘延遲的事了,感覺上是expire沒有生效的

伊谢尔伦伊谢尔伦2837 天前1109

全部回覆(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
  • 取消回覆