2013-12-07 47 views
2

如果我有關鍵字expires的架構;每次文檔更新時,我怎樣才能獲得該鍵的值來自動更新?這可能會更加複雜,但是,我是upsert ing,因此需要在初始insert上設置此值,然後更新每個upsert如何自動更新Mongodb中的Upsert上的時間戳

所以,當文檔insert編輯:

{ 
    expires: *an hour from the insert* 
} 

時,它的update d(通過upsert):

{ 
    expires: *an hour from the update* 
} 

我用貓鼬如果有內置此功能。如果Mongodb不支持它也不是Mongoose,我只需要編制expires:並更新值,但是如果在Mongodb中自動完成此操作將會很好!

其實真的不需要需要工作在insert;因爲我可以檢查expires是否爲空,並從_id中提取時間。

一如既往,任何幫助非常感謝!

回答

1

貓鼬中間件不會觸發update調用,因此你需要自己做:

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

另外,我不知道你的使用情況,但你也應該看看蒙戈內置 - 支持從收藏中過期數據,如果這是你想要做的。見here

+0

實際上這可能是一個好主意;我需要知道何時OAuth令牌過期(在我的情況下是一個小時)。我可以過期(TTL?)只是access_token的值嗎?然後,如果_id存在,那麼refresh_token也一樣,但access_token已過期,那麼我會知道請求一個新的access_token? –

+0

@JonathonOates我不太清楚你在問什麼,但MongoDB的到期時間是在文檔級而不是單個字段。 – JohnnyHK

+0

我必須自己更新它。我希望我可以僅僅過期一個特定鍵的價值。 –

0

當創建新模型時,最近版本的Mongoose允許將{ timestamps: true }作爲選項傳遞。該功能將自動設置createdAtupdatedAtHere is the documentation