[英]MongoDB NodeJS always expiring after one minute
我在我的節點應用程序中使用了MongoDB npm 模塊,我有這個代碼在集合中創建一個帶有TTL 索引的新對象:
var utcDate = new Date();
var emailObj = {email: emailAddress, createdAt: utcDate};
dbo.collection("initialEmail").createIndex({ "createdAt": 1 }, { expireAfterSeconds: 3600 });
dbo.collection("initialEmail").insertOne(emailObj, function(err, response) {
...
});
但是,條目總是在大約一分鍾后刪除(而不是我設置的 1 小時)。
我從我的研究中得知 mongo 運行其腳本以大約每分鍾刪除一次。 這讓我認為由於某種原因,我的 mongo 服務器時區與我的節點服務器時區不同,因此使創建的對象的 mongo 過期時間比當前 mongo 服務器時間早一個小時。
對於utcDate
變量,我嘗試過:
new Date( moment.utc().format() );
new Date( moment().valueOf() );
new Date(Date.now() - new Date().getTimezoneOffset() * 60 * 1000);
但沒有效果。 所有這些都使對象在大約 1 分鍾后刪除。
我也試過:(對於utcDate
)
moment().valueOf();
Date.now() - new Date().getTimezoneOffset() * 60 * 1000;
但是這些導致在將對象視為 JSON 時的createdAt
類型為 int,並且該對象永遠不會被刪除(即使在預期到期后等待了很多分鍾)。
如何確保插入的對象將始終持續至少一個小時?
我正在使用 docker-compose 和官方的mongo圖像。 我切換回var utcDate = new Date();
,並且猜測也許 docker 圖像出於某種原因保存了索引,很久以前,我將expireAfterSeconds
值設置為 60。並且因為它不會“更改現有索引的 expireAfterSeconds值”,我的值必須仍然是60。
我刪除了圖像並再次運行docker-compose up
並且它起作用了。
我根本沒有使用 docker 卷,所以我認為 mongo 圖像每次都會是一個全新的構建。 我不完全理解泊塢窗圖像數據的半持久性,所以如果你明白為什么數據庫集合索引屬性是從一個保存up
另一個,請評論並教育我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.