ホームページ > バックエンド開発 > Golang > `cursor.min()` を使用して MongoDB の mgo.v2 ドライバーに効率的なページングを実装する方法

`cursor.min()` を使用して MongoDB の mgo.v2 ドライバーに効率的なページングを実装する方法

DDD
リリース: 2024-12-31 06:38:14
オリジナル
637 人が閲覧しました

How to Implement Efficient Paging in MongoDB's mgo.v2 Driver Using `cursor.min()`?

mgo を使用した MongoDB の効率的なページング: Cursor.min() を使用したソリューション

Mongo はクエリで Skip メソッドと Limit メソッドを使用したページネーション機能を提供します操作。ただし、ページ数が増加すると、これらの方法は非効率になる可能性があります。ページングを最適化するために、MongoDB には、特定のインデックス エントリからクエリを開始できるようにするcursor.min() 機能が導入されました。

残念ながら、mgo.v2 ドライバーは、cursor.min() を直接サポートしていません。この記事では、Database.Run() メソッドと find コマンドを使用して、cursor.min() を使用して効率的なページングを実現するソリューションを紹介します。

手動実装

  1. 検索を作成するコマンド:

    cmd := bson.D{
        {Name: "find", Value: "users"},
        // Your query conditions
        {Name: "sort", Value: bson.D{
            {Name: "name", Value: 1},
            {Name: "_id", Value: 1}
        }},
        {Name: "limit", Value: 10},
        {Name: "batchSize", Value: 10},
        {Name: "singleBatch": true}
    }
    ログイン後にコピー
  2. コマンドを実行:

    var res struct {
        // Response fields
    }
    if err := db.Run(cmd, &res); err != nil {
        // Handle error
    }
    ログイン後にコピー
  3. デシリアライズ結果:

    var users []*User
    if err := db.C("users").NewIter(nil, res.Cursor.FirstBatch, 0, nil).All(&users); err != nil {
        // Handle error
    }
    ログイン後にコピー
  4. 次のカーソルの取得:

    if len(users) > 0 {
        lastUser := users[len(users)-1]
        // Convert last user to cursor data
    }
    ログイン後にコピー
  5. 変換カーソルデータを文字列:

    if cursorData != nil {
        cursor := base64.RawURLEncoding.EncodeToString(bson.Marshal(cursorData))
    }
    ログイン後にコピー

minquery パッケージの使用

minquery は、mgo でcursor.min() を使用するための簡素化されたインターフェイスを提供します。 .v2:

q := minquery.New(session.DB(""), "users", bson.M{"country": "USA"}).
    Sort("name", "_id").Limit(10)
if cursor := getLastCursor(); cursor != "" {
    q = q.Cursor(cursor)
}
var users []*User
newCursor, err := q.All(&users, "country", "name", "_id")
ログイン後にコピー

newCursor後続のページング要求のカーソル データを保存します。

注: minquery.All() を使用する場合、カーソル (インデックス エントリ) で使用されるフィールド名を指定して、適切なページング リクエストを作成できるようにします。カーソル値。

以上が`cursor.min()` を使用して MongoDB の mgo.v2 ドライバーに効率的なページングを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート