
공식문서 내용을 보면, TTL 기능은 인덱스에서 날짜 유형 값을 읽고 컬렉션에서 만료된 문서를 제거하는 mongodb의 백그라운드 스레드를 사용합니다. 라고 설명하고 있다.
즉 데이터에 만료 날짜를 설정하려면 두가지 작업을 해야한다.
1에서 설정한 key에 createdAt 시간 넣어주기위 두가지 작업을 해두면 mongodb 의 백그라운드 스레드가 만료된 문서를 자동으로 제거해준다.
createIndex 란?
데이터 베이스에서 인덱스는 책의 색인(index)처럼 작동하여 특정 데이터를 빠르게 찾을 수 있게 한다.
index를 기본으로 생성할 수도 있지만 createIndex 를 통해 index에 특별한 옵션을 줄 수 있다.
ex.성능 최적화,쿼리 효율성,정렬된 결과,유일성 제약조건을 적용할 수 있다.
> use TEST
> db.log_events.createIndex( { "createdAt": 1 }, { expireAfterSeconds: 10 } )
> db.log_events.insertOne( { "createdAt": new Date(), "logMessage": "TTL Test!" } )
예시 화면
새로고침 하면 10초 뒤에 없어지는 것 확인.

import motor.motor_asyncio
from datetime
client = motor.motor_asyncio.AsyncIOMotorClient('mongodb://root:1234@mongodb:27017')
db = client.TEST
collection_logs = db.logs
# 로그 TTL 설정
collection_logs.create_index([("ttl_1y", 1)], expireAfterSeconds=365*86400) # 1년
collection_logs.create_index([("ttl_1m", 1)], expireAfterSeconds=30*86400) # 1개월
# mongoDB INSERT
async def update_log(log):
# 1년으로 설정할 경우
log["ttl_1y"] = datetime.utcnow()
# 1개월로 설정할 경우
log["ttl_1m"] = datetime.utcnow()
await collection_logs.insert_one(log)
return True