簡體   English   中英

MongoDB NodeJS 總是在一分鍾后過期

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM