MongoDB(TTL 인덱스)로 만료된 문서를 자동으로 삭제
데이터를 삭제하는 cronjob을 실행하여 새 데이터를 삽입하거나 다른 솔루션을 삽입할 때마다 데이터를 삭제할 수 있습니다.
운 좋게도 제 아내는 MongoDB에 이미 그 메커니즘이 내장되어 있다고 말했습니다.
TTL 인덱스
TTL(Time-To-Live) 인덱스는 MongoDB가 일정 시간 후 컬렉션에서 문서를 자동으로 제거하는 데 사용할 수 있는 특수한 단일 필드 인덱스입니다.
mongod의 백그라운드 스레드는 인덱스의 값을 읽고 컬렉션에서 만료된 문서를 제거합니다(보통 1분마다).
예를 들어
lastModifiedDate
컬렉션의 eventlog
필드에 TTL 인덱스를 생성하려면 mongo 셸에서 다음 작업을 사용합니다.db.eventlog.createIndex( { "lastModifiedDate": 1 }, { expireAfterSeconds: 3600 } )
조건부 삭제
MongoDB 3.2부터 컬렉션은 지정된 필터 표현식
partialFilterExpression
을 사용하여 부분적으로 인덱싱될 수 있습니다. TTL 인덱스는 부분 인덱스와 함께 사용할 수도 있습니다.예를 들어:
1시간 전에 생성된 문서를 삭제하고 해당 문서의
state
는 TMP
입니다.db.eventlog.createIndex(
{ created_at: 1 },
{ expireAfterSeconds: 3600, partialFilterExpression: { state: 'TMP' } }
);
1일 전에 생성된 문서
count
가 5
보다 낮은 문서를 삭제합니다.db.eventlog.createIndex(
{ created_at: 1 },
{ expireAfterSeconds: 86400, partialFilterExpression: { count: { $lt: 5 } } }
);
Additional info on partial indexes
실제 사례
최근에 앱 번들 크기를 모니터링하는 데 도움이 되는 무료 도구인 BundleMon 개발을 완료했습니다.
BundleMon의 구성 요소 중 하나는 지점 간의 번들 크기를 비교하기 위해 이력 보고서를 저장하는 서비스이므로 PR BundleMon을 열면 현재 번들 크기 보고서와 함께 레코드를 저장합니다.
보고서를 30일 이상 저장할 필요가 없으므로 TTL 인덱스를 추가했습니다.
db.reports.createIndex(
{ creationDate: 1 },
{ expireAfterSeconds: 2592000, partialFilterExpression: { prNumber: { $exists: true } } }
);
Reference
이 문제에 관하여(MongoDB(TTL 인덱스)로 만료된 문서를 자동으로 삭제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/lironer/delete-expired-documents-automatically-with-mongodb-ttl-index-l44텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)