2013-12-07 2 views
2

키가있는 스키마가있는 경우 expires; 문서가 업데이트 될 때마다 자동으로 업데이트되도록 해당 키 값을 어떻게 얻을 수 있습니까? 이것은 더 복잡 할 수도 있지만, upsert ing이므로이 값은 초기에 insert으로 설정하고 각 upsert에서 업데이트해야합니다. 문서가 insert 에드 때Mongodb의 Upsert에서 타임 스탬프 자동 업데이트 방법

그래서 :

{ 
    expires: *an hour from the insert* 
} 

을하고 update d는 (upsert 통해) 때 : 나는 몽구스를 사용하고

{ 
    expires: *an hour from the update* 
} 

그 내장이 기능이있는 경우. Mongodb이 그것을 지원하지 않거나 Mongoose를 수행하지 않는다면 expires:을 수정하고 값을 업데이트해야하지만 Mongodb에서 자동으로 수행하는 것이 좋을 것입니다!

사실, 은 실제로인데 insert에서 작업해야합니다. expires이 비어 있는지 확인하고 _id에서 시간을 추출 할 수 있습니다.

언제나처럼, 어떤 도움을 주셔서 감사합니다!

var expires = new Date(); 
expires.setHours(expires.getHours() + 1); 
MyModel.update({...}, {$set: {expires: expires, ...}}, {upsert: true}, callback); 

를 또한 내가 사용 사례를 모르는,하지만 당신은 몽고의 내장 보라 : 당신은 스스로를해야 할 것입니다, 그래서

답변

1

몽구스 미들웨어, update 호출에 발생하지 않습니다 컬렉션에서 데이터 만료를 지원한다면 그렇게 할 수 있습니다. here을 참조하십시오.

+0

실제로 좋은 아이디어 일 수 있습니다. OAuth 토큰이 만료 될 때 (내 경우에는 한 시간)를 알아야합니다. access_token의 값만 만료시킬 수 있습니까 (TTL?)? 그렇다면 _id가 존재하고 refresh_token도 그렇지만 access_token이 만료 되었다면 새로운 access_token을 요청할 것입니다. –

+0

@JonathonOates 당신이 요구하는 것이 확실치 않지만 MongoDB의 만료는 개별 필드가 아닌 문서 수준에서 발생합니다. – JohnnyHK

+0

직접 업데이트해야합니다. 내가 특정 키의 가치를 만료시킬 수 있기를 바랬다. –

0

최근 몽구스 버전에서는 새 모델을 만들 때 { timestamps: true }을 옵션으로 전달할 수 있습니다. 이 기능은 자동으로 createdAtupdatedAt을 설정합니다. Here is the documentation.

관련 문제