yanom blog

様々な技術について書きます

MongoDB TTL(time to live)の設定方法

よく忘れるので備忘を兼ねて残しておきます。
MongoDB version 3.4.10

tl;dr

  • TTLに指定するキーは時刻型

データ登録

今回テスト用のデータは以下です。

{host:"test",time:{"$date":"2018-06-09T10:20:05.000Z"}}

TTLで設定するデータ型は時刻型でないといけません。
また、今回はcurlでデータ登録します。(最近のmongodbではrest apiで登録できなくなった?ようです)

# データ登録
$ curl -v localhost:28017/data/test -d @test.json
{ "ok" : true }
# 確認
$ mongo
> use data
> db.test.find()
{ "_id" : ObjectId("5bbc01b11dbd0690028bc91e"), "host" : "test", "time" : ISODate("2018-06-09T10:20:05Z") }     

TTLの設定

> db.test.ensureIndex({time:1},{expireAfterSeconds:300}) 
{         
        "createdCollectionAutomatically" : false,
        "numIndexesBefore" : 1,
        "numIndexesAfter" : 2,
        "ok" : 1                                                                                                                                               
}

# 確認
> db.stat.getIndexes()
[
        {
                "v" : 2,
                "key" : {
                        "_id" : 1
                },
                "name" : "_id_",
                "ns" : "data.stat"
        },
        {
                "v" : 2,
                "key" : {
                        "time" : 1
                },
                "name" : "time_1",
                "ns" : "data.stat",
                "expireAfterSeconds" : 300
        }
]

TTLの設定ができていますね。
今回の場合、5分前のデータが削除されていくことになります。

参考