在我的Node.js應用程序中,我試圖添加TTL索引到MongoDB collecion中的日期字段,以使其在指定日期到期。未能使MongoDB文檔過期使用TTL索引
應用程序通過new Date()
獲取當前日期,將其轉換爲毫秒通過getTime()
方法,增加了許多由用戶(到期時間)指定毫秒的,並且將結果通過setTime()
轉換回日期格式。結果保存在最終插入到MongoDB集合的JSON對象中的名爲expireAt
的字段中。
結果看起來不錯,因爲它準確地表示根據UTC時區調整爲添加到當前日期的到期時間的日期。例如: expireAt: "2017-05-14T13:59:01.998Z"
,它是在UTC的13:00附近插入的,過期時間爲1小時。
要添加的TTL指數,我添加了下面一行在我節點應用:
collection.createIndex({"expireAt": 1}, {expireAfterSeconds: 0, name: "_exp"});
然而,這給了我一個MongoError: Values in the index key pattern cannot be 0
錯誤和沒有索引的創建,所以我切換到:
collection.createIndex({"expireAt": 1}, {expireAfterSeconds: 1, name: "_exp"});
這一次,和索引的創建,當我跑了,as I could see using MongoDB Compass
我接着就插入了expireAt
FIEL文件d,例如上面用expireAt: "2017-05-14T13:59:01.998Z"
解釋的那個。但是,文件應該過期了將近一個小時,而且還沒有。另外,上面的圖片顯示TTL索引有0個用法,這表明由於某種原因插入的新文檔沒有使用該索引,儘管有expireAt
字段。
此外,MongoDB指南針將expireAt
字段的內容顯示爲類型字符串,而不是特定的BSON日期類型。但是,我不確定這是否只是一個Compass的事情,因爲它不允許我將字段類型編輯爲除String,Object或Array之外的任何其他類型。
有什麼我可能會失蹤,或有人遇到類似的問題,發現靈魂?我試圖尋找類似問題的解決方案,但沒有成功。
我''新的日期包裹的價值()''只是寫的分貝,現在它被正確保存日期格式和文件之前似乎是正確到期。它看起來像對象被保存爲JSON然後發送到HTTP請求的主體。 –