2013-06-12 8 views
0

저는 이것을 위해 몽구스를 사용하고 있습니다.Mongodb (몽구스 사용) expiresAfterSeconds (TTL)가 작동하지 않는 것 같습니다.

내 스키마는 다음과 같이이다 :

> db.usuarios.getIndexes() 
[ 
    { 
     "v" : 1, 
     "key" : { 
      "_id" : 1 
     }, 
     "ns" : "dbnamehere.usuarios", 
     "name" : "_id_" 
    }, 
    { 
     "v" : 1, 
     "key" : { 
      "email" : 1 
     }, 
     "unique" : true, 
     "ns" : "dbnamehere.usuarios", 
     "name" : "email_1", 
     "background" : true, 
     "safe" : true 
    }, 
    { 
     "v" : 1, 
     "key" : { 
      "test_expira" : 1 
     }, 
     "ns" : "dbnamehere.usuarios", 
     "name" : "test_expira_1", 
     "expiresAfterSeconds" : 120, 
     "background" : true, 
     "safe" : true 
    } 
] 
> new Date(); 
ISODate("2013-06-12T17:41:43.263Z") 
> db.usuarios.findOne({email : '[email protected]'}); 
{ 
    /* some fields go in here! */ 
    "email" : "[email protected]", 
    /* some more fields go in here */ 
    "_id" : ObjectId("51b8b087de01a2ec28000002"), 
    "test_expira" : ISODate("2013-06-12T17:31:51.156Z"), 
    /* some yet more fields go in here */ 
    "__v" : 0 
} 

내가 어떻게되는지 오랫동안 테스트하지 않았습니다 :

var UsuarioSchema = new Schema({ 
    email : { type : Email, index : { unique : true}, required : true }, 
    //some other fields, but not required, hopefully, for this sample code 
    test_expira : { type : Date, default : Date.now, index : { expires : 120 }} 
}); 

MongoDB의 쉘에서 실행이 내가 문제를 생각하는 정보입니다 삭제되지 않고 문서 상태가 단지 1 분의 오버 헤드 만 있으면 예상 할 수있는 상태 여야하지만 문서가 120 초 동안 지속되어야하는 경우 15 분이 넘지 않아야합니다.

나는 이것을 어떻게 처리해야할지 확신하지 못합니다. 도움말 크게 :) 이해할 수있을 것이다

편집 : 몽구스의 버전 나는이 기능을 테스트 한 3.0.3

+0

mongod 로그를보세요. 매분마다 TTL 모니터를 볼 수 있습니까? –

+0

btw, 로그에있는 동안 서버에있는 시간을 기록하십시오. - 새 Date()는 서버 시간이 아닌 쉘 호스트 시간을 제공합니다. 서버에서 이전 버전 일 수 있습니다. –

+0

TTL 모니터가 실행되고 있다는 증거는 발견되지 않았습니다. mongodb.conf 파일에서 어디에이 구성을 지정해야하는지 확신 할 수 없습니다. 명시 적으로 필요하다고 표시해야 할 경우를 대비해 현재의 conf 파일이이를 나타내지 않는다는 것을 알고 있습니다 ... 나는 TTLMonitor 스레드가 자동으로 실행을 시작합니다. 또한 답변 해 주셔서 감사합니다. – Mamsaac

답변

2

v2.4.4입니다 사용하여 MongoDB의 버전이며 2.4.4 MongoDB를 함께 잘 작동합니다.

인덱스를 면밀히 살펴보면서 문제가 작은 오타임을 알았습니다. 작동

내 TTL 지수 :

{ 
    "v" : 1, 
    "key" : { 
     "test_expira" : 1 
    }, 
    "ns" : "test.usuarios", 
    "name" : "test_expira_1", 
    "expireAfterSeconds" : 120, 
    "background" : true, 
    "safe" : true 
} 

귀하의 TTL 지수는 작동하지 않습니다

{ 
    "v" : 1, 
    "key" : { 
     "test_expira" : 1 
    }, 
    "ns" : "dbnamehere.usuarios", 
    "name" : "test_expira_1", 
    "expiresAfterSeconds" : 120, 
    "background" : true, 
    "safe" : true 
} 

참고 TTL 지수에 대한 올바른 키 이름은 당신이 여분의 문자가 "expireAfterSeconds"이고 "expiresAfterSeconds"입니다.

+0

나는 당신이 몽구스를 사용하고 "만료"는 구문 에서이 속성을 지정하는 적절한 방법임을 깨닫게. 나는 Mongooose와 MongoDB 인덱스 정의 사이의 연결 해제 위치를 확인하고있다. –

+0

Mongoose의 버그가 9 개월 전에 고쳐진 것 같습니다 - 당신의 몽구스 버전을 업데이트 하시겠습니까? https://github.com/LearnBoost/mongoose/issues/1132 –

+0

수정 사항은 3.2.2에서 현재까지 모든 몽구스 버전에 있습니다. 3.0.3은 TTL 인덱스에 대한 지원을 추가 한 첫 번째 버전이므로 3.0.3에서 3.2.1까지이 문제가있었습니다. –

관련 문제