Akata Works

東京エンジニア。主にRuby,Go,たまにAWSとiOS。ゲーム音楽が好きです。連絡はTwitterかakata.onen@gmail.comまで

MongoDB TTLのexpireAfterSecondsを変更する

MongoDBにはドキュメントサイズで削除するキャップ付きコレクションと有効期限で削除するTTLインデックスがあります

TTLインデックスの有効期限であるexpireAfterSecondsを変更する方法には二種類あり、dropIndexからのcreateIndexでインデックスを張り直すというのも一つの手ですが、backgroundオプションがなければロックがかかりますし、あってもbackgroundオプションありで作られたインデックスは最適化されるまで時間がかかります

なので、runCommandとcollModを使った方法をおすすめします

db.runCommand({collMod: <collection_name>, index: {keyPattern: <key_pattern>, expireAfterSeconds: <expire_after_seconds>}})
db.runCommand({collMod: 'example_colls', index: {keyPattern: {datetime: 1}, expireAfterSeconds: 86400}})

らくちん

参考URL

Expire Data from Collections by Setting TTL — MongoDB Manual 3.4