Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Memastikan Tamat Tempoh Dokumen dalam MongoDB Menggunakan Go-Mongo-Driver?

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

Susan Sarandon
Susan Sarandonasal
2024-10-29 22:15:041036semak imbas

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>

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!

Kenyataan:
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