Bagaimana untuk Memastikan Tamat Tempoh Dokumen dalam MongoDB Menggunakan Go-Mongo-Driver?

Susan Sarandon
Lepaskan: 2024-10-29 22:15:04
asal
900 orang telah melayarinya

How to Ensure Document Expiration in MongoDB Using Go-Mongo-Driver?

Dokumen Tamat Tempoh Selepas Tempoh Ditentukan di Golang Menggunakan Mongo

Di Golang, mongo-go-driver menyediakan keupayaan untuk tamat tempoh dokumen secara automatik selepas bilangan saat tertentu. Walau bagaimanapun, sesetengah pengguna mungkin menghadapi masalah dengan ciri ini tidak berfungsi seperti yang diharapkan.

Untuk menyelesaikan masalah ini, adalah penting untuk mematuhi prosedur yang betul untuk mencipta indeks expireAfterSeconds. Ini melibatkan penyediaan indeks TTL (Time-to-Live) yang menentukan tempoh masa selepas dokumen harus dipadamkan.

Kod Contoh untuk Dokumen Tamat Tempoh

<code class="golang">package main

import (
    "context"
    "fmt"
    "log"
    "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 an index to the collection with an expireAfterSeconds option
    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 documents with createdAt timestamp
    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)
    }

    // Find all documents in the collection
    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)
    }

    // Note that there may be a delay in deleting expired documents (up to 60 seconds)
    fmt.Println(datas)
}

type NFT struct {
    ID        primitive.ObjectID `bson:"_id,omitempty"`
    CreatedAt time.Time          `bson:"createdAt,omitempty"`
    Timestamp time.Time          `bson:"timestamp,omitempty"`
    Name      string             `bson:"name,omitempty"`
}</code>
Salin selepas log masuk

Nota: Tugas latar belakang MongoDB untuk mengalih keluar dokumen tamat tempoh berjalan setiap 60 saat. Oleh itu, mungkin terdapat kelewatan dalam memadamkan dokumen yang telah tamat tempoh, berkemungkinan sehingga 60 saat.

Atas ialah kandungan terperinci Bagaimana untuk Memastikan Tamat Tempoh Dokumen dalam MongoDB Menggunakan Go-Mongo-Driver?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!