首頁  >  文章  >  後端開發  >  為什麼我的 MongoDB 文件在 Go 中使用 TTL 索引 5 秒後沒有過期?

為什麼我的 MongoDB 文件在 Go 中使用 TTL 索引 5 秒後沒有過期?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-30 21:50:30995瀏覽

Why Aren't My MongoDB Documents Expiring After 5 Seconds with TTL Indexes in Go?

在Go 中使用MongoDB 在指定秒數後使文件過期

使用TTL 索引,MongoDB 允許您在指定時間後使您自動文檔過期期間。本文示範如何使用官方 mongo-go-driver 在 Go 中實現此目的。

按照MongoDB 文檔,代碼展示瞭如何:

  • 使用expireAfterSeconds 創建索引選項
  • 插入具有不同創建時間戳的示例數據

但是,提供的範例執行正確,且問題與程式碼無關。

了解 TTL 索引行為

expireAfterSeconds 參數指定在createdAt 欄位之後文件應被視為過期的持續時間。不過,過期文檔的刪除並不是立即進行的。

根據MongoDB 文件:

「TTL 索引並不能保證過期資料會在過期後立即刪除。可能會有延遲文件過期時間和MongoDB 從資料庫中刪除文件的時間之間。 ”

用於刪除的後台任務

MongoDB 有一個刪除過期文檔的後台任務每60 秒一次。因此,文件在過期後可能會在集合中保留最多 60 秒。此外,如果資料庫負載過重,刪除所有過期文件可能需要額外的時間。

解決方案

在您的程式碼片段中,您期望一些文件將在5 秒後刪除(基於expireAfterSeconds 選項),但僅在插入後等待幾秒進行驗證。為了正確測試功能,您應該留出足夠的時間(至少幾分鐘)讓後台任務執行並刪除過期的文件。

以上是為什麼我的 MongoDB 文件在 Go 中使用 TTL 索引 5 秒後沒有過期?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn