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>
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!