ホームページ バックエンド開発 Golang Go-Mongo-Driver を使用して MongoDB でドキュメントの有効期限を確認する方法

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

Oct 29, 2024 pm 10:15 PM

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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ホットトピック

GoでKubernetesオペレーターの開発 GoでKubernetesオペレーターの開発 Jul 25, 2025 am 02:38 AM

Kubernetesoperatorを書く最も効率的な方法は、Goを使用してKubeBuilderとController-Runtimeを組み合わせて使用することです。 1.オペレーターのパターンを理解する:CRDを介してカスタムリソースを定義し、コントローラーを作成してリソースの変更を聞き、和解ループを実行して予想される状態を維持します。 2。KubeBuilderを使用してプロジェクトを初期化し、APIを作成してCRD、コントローラー、構成ファイルを自動的に生成します。 3. API/V1/MyApp_Types.goでCRDの仕様とステータス構造を定義し、MakeManifestsを実行してCrdyamlを生成します。 4。コントローラーの和解

HTTPミドルウェアロギングの例を例に進めます HTTPミドルウェアロギングの例を例に進めます Aug 03, 2025 am 11:35 AM

GOのHTTPログミドルウェアは、リクエストメソッド、パス、クライアントIP、および時間がかかることを記録できます。 1. http.handlerfuncを使用してプロセッサをラップします。2。next.servehttpを呼び出す前後の開始時間と終了時間を記録します。完全なサンプルコードの実行が検証されており、中小のプロジェクトの開始に適しています。拡張機能の提案には、ステータスコードのキャプチャ、JSONログのサポート、リクエストIDトラッキングが含まれます。

Go byの例でStdinから読む Go byの例でStdinから読む Jul 27, 2025 am 04:15 AM

FMT.Scanfを使用して、単純な構造化データに適したフォーマット入力を読み取りますが、スペースに遭遇すると文字列が切断されます。 2。bufio.scannerを使用して行ごとに読み取り、マルチライン入力、EOF検出、パイプライン入力をサポートし、スキャンエラーを処理できることをお勧めします。 3。Io.Readall(os.stdin)を使用して、すべての入力を一度に読み取ります。大きなブロックデータまたはファイルストリームの処理に適しています。 4.リアルタイムの主要な応答には、golang.org/x/termなどのサードパーティライブラリが必要であり、Bufioは従来のシナリオには十分です。実用的な提案:インタラクティブなシンプルな入力にFMT.SCANを使用し、ライン入力またはパイプラインにbufio.scannerを使用し、io.readallを使用して大規模なブロックデータを使用し、常に処理します

SwitchステートメントはGOでどのように機能しますか? SwitchステートメントはGOでどのように機能しますか? Jul 30, 2025 am 05:11 AM

Goのスイッチステートメントは、デフォルトでプロセス全体で実行されず、最初の条件に合わせた後に自動的に終了します。 1.スイッチはキーワードで始まり、1つまたはnoの値を持ち運ぶことができます。 2。上から下へのケースマッチは、最初の一致のみが実行されます。 3.複数の条件をコンマでリストして、同じケースに一致させることができます。 4.手動で休憩を追加する必要はありませんが、強制することができます。 5.デフォルトは、通常最後に配置されている比類のないケースに使用されます。

Jul 29, 2025 am 04:10 AM

ストリーミングデータについては、Kafkaと統合します ストリーミングデータについては、Kafkaと統合します Jul 26, 2025 am 08:17 AM

GoとKafka Integrationは、高性能のリアルタイムデータシステムを構築するための効果的なソリューションです。適切なクライアントライブラリは、ニーズに応じて選択する必要があります。1。カフカゴーが優先され、迅速な開発に適したシンプルなゴースタイルAPIと優れたコンテキストサポートを取得します。 2.微細な制御または高度な機能が必要な場合は、サラマを選択します。 3.プロデューサーを実装する場合、正しいブローカーアドレス、テーマ、ロードバランス戦略を構成し、コンテキストを通じてタイムアウトと閉鎖を管理する必要があります。 4.消費者は、消費者グループを使用してスケーラビリティとフォールトトレランスを実現し、オフセットを自動的に送信し、合理的に同時処理を使用する必要があります。 5.シリアル化にはJSON、Avro、またはProtobufを使用すると、Schemaregistrを組み合わせることをお勧めします

GOでセットデータ構造を効率的に実装する方法は? GOでセットデータ構造を効率的に実装する方法は? Jul 25, 2025 am 03:58 AM

GOには組み込みのコレクションタイプはありませんが、マップを介して効率的に実装できます。マップ[t] struct {}を使用して要素キーを保存し、空の構造にはメモリオーバーヘッドがゼロになり、追加、検査、削除、その他の操作の実装はo(1)時間の複雑さです。同時環境では、sync.rwmutexまたはsync.mapを組み合わせて、スレッドの安全性を確保することができます。パフォーマンス、メモリの使用、ハッシュコスト、障害の観点から。標準の収集動作をシミュレートするために、add、削除、含有、サイズ、およびその他の方法をカプセル化することをお勧めします。

GOアプリケーションの標準プロジェクトレイアウトは何ですか? GOアプリケーションの標準プロジェクトレイアウトは何ですか? Aug 02, 2025 pm 02:31 PM

答えは次のとおりです。GOアプリケーションには必須のプロジェクトレイアウトがありませんが、コミュニティは一般に、保守性とスケーラビリティを改善するために標準構造を採用しています。 1.CMD/プログラムの入り口を保存します。各サブディレクトリは、CMD/MyApp/Main.goなどの実行可能ファイルに対応しています。 2.内部/保存プライベートコード、外部モジュールによってインポートすることはできず、ビジネスロジックとサービスのカプセル化に使用されます。 3.PKG/ストア他のプロジェクトをインポートするための公に再利用可能なライブラリ。 4.API/オプションでOpenapi、Protobuf、およびその他のAPI定義ファイルを保存します。 5.Config/、Scripts/、およびWeb/Store構成ファイル、スクリプト、Webリソース。 6.ルートディレクトリにはgo.mod and go.sumが含まれています

See all articles