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分前のデータが削除されていくことになります。