Wie kann der Ablauf von Dokumenten in MongoDB mithilfe des Go-Mongo-Treibers sichergestellt werden?

Susan Sarandon
Freigeben: 2024-10-29 22:15:04
Original
901 Leute haben es durchsucht

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

Ablaufen von Dokumenten nach einem bestimmten Zeitraum in Golang mit Mongo

In Golang bietet mongo-go-driver die Möglichkeit, Dokumente automatisch ablaufen zu lassen eine bestimmte Anzahl von Sekunden. Bei einigen Benutzern kann es jedoch zu Problemen kommen, wenn diese Funktion nicht wie vorgesehen funktioniert.

Um dieses Problem zu beheben, ist es wichtig, das richtige Verfahren zum Erstellen eines ExpireAfterSeconds-Index einzuhalten. Dazu gehört die Einrichtung eines TTL-Index (Time-to-Live), der den Zeitraum bestimmt, nach dem ein Dokument gelöscht werden soll.

Beispielcode für ablaufende Dokumente

<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>
Nach dem Login kopieren

Hinweis: Die Hintergrundaufgabe von MongoDB zum Entfernen abgelaufener Dokumente wird alle 60 Sekunden ausgeführt. Daher kann es beim Löschen abgelaufener Dokumente zu einer Verzögerung von möglicherweise bis zu 60 Sekunden kommen.

Das obige ist der detaillierte Inhalt vonWie kann der Ablauf von Dokumenten in MongoDB mithilfe des Go-Mongo-Treibers sichergestellt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!