ホームページ > バックエンド開発 > Golang > ネイティブのcursor.min()サポートなしでmgo.v2を使用してMongoDBに効率的なページングを実装する方法は?

ネイティブのcursor.min()サポートなしでmgo.v2を使用してMongoDBに効率的なページングを実装する方法は?

DDD
リリース: 2024-12-17 22:02:10
オリジナル
736 人が閲覧しました

How to Implement Efficient Paging in MongoDB with mgo.v2 without Native cursor.min() Support?

cursor.min() を使用した mgo による MongoDB での効率的なページング

MongoDB のページング機能。通常は Query.Skip() と Query を使用して実装されます。 .Limit() は、ページ番号が増加すると遅くなる可能性があります。これに対処するために、MongoDB は、結果のリストを開始する最初のインデックス エントリを指定できる Cursor.min() を導入しました。

mgo.v2 の制限

残念ながら、 mgo.v2 ドライバーには、cursor.min() のサポートがありません。ただし、この機能は、Database.Run() メソッドを使用して、find コマンドなどの MongoDB コマンドを実行することで実現できます。

手動による効率的なページングの実装

  1. フィルター、ソート、制限、およびオプションでcursor.min()を使用してfindコマンドを構築します。引数。
  2. Database.Run() を使用してコマンドを実行し、結果をデコードします。
  3. Collection.NewIter() を使用して結果を目的の型に変換します。
  4. バッチ内の最後のドキュメントからの新しいカーソル データ。
  5. base64 エンコーディングを使用して、カーソル データを Web セーフに変換します。 string.

github.com/icza/minquery の使用

minquery パッケージは、cursor.min を使用して検索コマンドを実行するプロセスを簡素化するラッパーを提供します。 () support.

q := minquery.New(session.DB(""), "users", bson.M{"country" : "USA"}).
    Sort("name", "_id").Limit(10)
// If this is not the first page, set cursor:
if cursor := getLastCursor(); cursor != "" {
    q = q.Cursor(cursor)
}

var users []*User
newCursor, err := q.All(&users, "country", "name", "_id")
ログイン後にコピー

注: minquery.All() を使用する場合は、直接使用しない場合でも、結果をデコードするときにカーソル フィールドの名前を指定します。これは、後続のクエリのカーソル データを生成するために重要です。

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

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