Go-Mongo-Driver を使用して MongoDB でドキュメントの有効期限を確認する方法

Susan Sarandon
リリース: 2024-10-29 22:15:04
オリジナル
901 人が閲覧しました

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

Mongo を使用した Golang での指定された期間後にドキュメントを期限切れにする

Golang では、mongo-go-driver は、指定された期間後にドキュメントを自動的に期限切れにする機能を提供します。指定された秒数。ただし、一部のユーザーは、この機能が意図したとおりに機能しないという問題に遭遇する可能性があります。

これを解決するには、expireAfterSeconds インデックスを作成するための正しい手順に従うことが重要です。これには、ドキュメントを削除するまでの期間を決定する TTL (Time-to-Live) インデックスの設定が含まれます。

期限切れドキュメントのサンプル コード

<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>
ログイン後にコピー

注: 期限切れのドキュメントを削除するための MongoDB のバックグラウンド タスクは 60 秒ごとに実行されます。したがって、期限切れのドキュメントの削除には遅延が発生する可能性があり、最大 60 秒かかる可能性があります。

以上がGo-Mongo-Driver を使用して MongoDB でドキュメントの有効期限を確認する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!