2017-11-04 7 views
0

이메일을 확인하지 않으면 3 일 후에 사용자 계정을 삭제하고 싶습니다. 스케줄러가 비효율적 일 것이기 때문에 나는이 삭제를 MongoDB에서 스케줄링하는 방법을 찾고있다. 또한 사용자가 이메일을 확인하는 경우이를 취소 할 방법이 필요합니다.N 일 후에 MongoDB 문서를 삭제하십시오.

저는 MongoDB에 대해 mgo를 api로 사용하고 있으며 최신 Go (1.9)를 실행하고 있습니다.

+0

[TTL 설정으로 컬렉션의 데이터 만료] (https://docs.mongodb.com/manual/tutorial/expire-data/) 첫 번째 검색 결과의 종류. –

+0

[MongoDB : 컬렉션에서 이전 레코드를 제거하는 방법] (https://stackoverflow.com/questions/46441006/mongodb-how-to-remove-older-records-from-a-collection) –

답변

1

이 당신은 partial index expression와 MongoDB를의 TTL 인덱스를 함께 사용할 수 MongoDB를 버전 3.4

에 달성 될 수있다. users 컬렉션 다음 인덱스를 추가

시도 :

db.users.ensureIndex(
{ created_at:1}, 
{ expireAfterSeconds:259200, 
    partialFilterExpression:{"verified" : false}}) 

검증되지 않고는 추가 된 이후 3 일이었다 삭제 모든 사용자와이 TTL 인덱스입니다.

+0

감사의 가능한 복제본 . 누군가이 계좌를 확인할 때이 수표를 제거 할 수 있습니까? 그래서 mongodb는 매번 이것을 확인하지 않습니다. 또한 문서를 만든 시간 또는이 명령을 실행 한 시간과 관련하여 expireAfterSeconds가 있습니까? – Florian

+0

첫 번째 부분에서는 앱 측에서 업데이트해야합니다 (사용자가 수락하면 true로 설정 됨). expireAfterSec은 문서를 만든 시간을 나타냅니다. – Astro

+0

@Florian TTL expieries를 실행하는 백그라운드 프로세스는 (iirc, TTL 인덱스가없는 경우에도) 매분마다 실행됩니다. 걱정할 필요 없어. –

0

몽고의 TTL 인덱스 만 (MongoDB documentation: 추출) 추가적인 조건부 논리 이상의

if NowDate() > fieldDate { killMe() }

난이다 생각할 수있는 유일한 대안 ...

If the indexed field in a document is not a date or an array that holds a date value(s), the document will not expire.

와 날짜를 지원할

사용자가 자신의 이메일을 확인할 때 null으로 설정하면 트릭을 수행 할 수 있습니다.

환호