第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在golang中使用mongo,在指定秒數(shù)后過期文檔?

在golang中使用mongo,在指定秒數(shù)后過期文檔?

Go
蝴蝶刀刀 2022-10-10 15:22:01
我正在嘗試使用mongo-go-driver做一些簡單的事情。我在集合中插入了一些數(shù)據(jù),我希望它們在幾秒鐘后被自動刪除。我已閱讀以下文檔:https ://docs.mongodb.com/manual/tutorial/expire-data/#expire-documents-after-a-specified-number-of-seconds然后我在 GO 中寫了一些東西,但它似乎沒有像我預(yù)期的那樣工作。也許有些東西我沒有得到,或者我做錯了。package mainimport (    "bytes"    "context"    "fmt"    "log"    "text/tabwriter"    "time"    "github.com/Pallinder/go-randomdata"    "go.mongodb.org/mongo-driver/bson"    "go.mongodb.org/mongo-driver/bson/primitive"    "go.mongodb.org/mongo-driver/mongo"    "go.mongodb.org/mongo-driver/mongo/options")func main() {    ctx := context.TODO()    client, err := mongo.NewClient(options.Client().ApplyURI("mongodb://localhost:27017"))    if err != nil {        log.Fatal(err)    }    err = client.Connect(ctx)    if err != nil {        log.Fatal(err)    }    db := client.Database("LADB")    col := db.Collection("LACOLL")    // add index to col    // the goal is to set a TTL for datas to only 1 secondes (test purpose)    model := mongo.IndexModel{        Keys:    bson.M{"createdAt": 1},        Options: options.Index().SetExpireAfterSeconds(1),    }    ind, err := col.Indexes().CreateOne(ctx, model)    if err != nil {        log.Fatal(err)    }    fmt.Println(ind)    // insert some datas each seconds    for i := 0; i < 5; i++ {        name := randomdata.SillyName()        res, err := col.InsertOne(ctx, NFT{Timestamp: time.Now(), CreatedAt: time.Now(), Name: name})        if err != nil {            log.Fatal(err)        }        fmt.Println("Inserted", name, "with id", res.InsertedID)        time.Sleep(1 * time.Second)    }    // display all    cursor, err := col.Find(ctx, bson.M{}, nil)    if err != nil {        log.Fatal(err)    }    var datas []NFT    if err = cursor.All(ctx, &datas); err != nil {        log.Fatal(err)    }
查看完整描述

1 回答

?
aluckdog

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超7個贊

您的示例沒有任何問題,它有效。

請注意,expireAfterSeconds您指定的時間createdAt是文檔過期后的持續(xù)時間,而該時刻是文檔可能被刪除的最早時間,但不能保證刪除會“立即”發(fā)生,即在那個時間。

引用MongoDB 文檔:TTL 索引:刪除操作的時間:

TTL 索引不保證過期數(shù)據(jù)會在過期后立即被刪除。文檔過期和 MongoDB 從數(shù)據(jù)庫中刪除文檔的時間之間可能存在延遲。

刪除過期文檔的后臺任務(wù)每 60 秒運(yùn)行一次。因此,在文檔到期和后臺任務(wù)運(yùn)行之間的時間段內(nèi),文檔可能會保留在集合中。

由于刪除操作的持續(xù)時間取決于您的mongod實(shí)例的工作負(fù)載,因此在后臺任務(wù)運(yùn)行之間的 60 秒時間間隔之后,過期數(shù)據(jù)可能會存在一段時間。

如您所見,如果一個文檔過期,最壞的情況下,后臺任務(wù)可能需要 60 秒才能啟動并開始刪除過期文檔,如果有很多(或數(shù)據(jù)庫負(fù)載過重),則可能需要一些是時候刪除所有過期的文件了。


查看完整回答
反對 回復(fù) 2022-10-10
  • 1 回答
  • 0 關(guān)注
  • 328 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號