mgo を使用した効率的な MongoDB ページネーション
MongoDB は、Query.Skip() および Query.Limit() を使用したページネーションの組み込みサポートを提供します。ただし、MongoDB はスキップする必要があるドキュメントを省略するためにすべての結果ドキュメントを反復処理する必要があるため、この方法は結果セットが大きい場合には遅くなる可能性があります。
MongoDB は、cursor.min() 機能を提供することで解決策を提供します。これにより、結果をリストする最初のインデックス エントリを指定できます。残念ながら、mgo.v2 ドライバーには、cursor.min() を指定するための API 呼び出しがありません。
mgo.v2 で MongoDB のcursor.min() 機能を使用して効率的なページングを実現するには、Database.Run () メソッドを使用して、MongoDB コマンドを直接実行します。 find コマンドは min 引数の指定をサポートしています。
結果の各バッチの後、クエリ結果の最後のドキュメントから min ドキュメントを生成し、次のバッチのクエリを実行する前に設定できます。 min ドキュメントには、クエリの実行に使用されるインデックス エントリの値が含まれている必要があります。
このプロセスは、回答で説明されているように手動で行うことも、github.com/ などのサードパーティ ライブラリを使用することもできます。 icza/minquery。カーソルの指定を含む、MongoDB 検索コマンドの設定と実行のためのラッパーを提供します。
minquery を使用すると、次のように最小カーソルを指定できます。 this:
q := minquery.New(session.DB(""), "users", bson.M{"country": "USA"}). Sort("name", "_id").Limit(10). Cursor(cursor)
ここで、cursor は前のバッチから取得したカーソルです。
MinQuery.All() を使用する場合は、カーソル フィールドの名前を最後の引数。また、部分的な結果を取得する場合は、直接使用するつもりがない場合でも、カーソル (インデックス エントリ) の一部であるすべてのフィールドを含める必要があります。これは、MinQuery.All() がすべての値を必要とするためです。カーソルフィールドの値を変更して、適切なカーソル値を作成します。
以上がmgo.v2 を使用して効率的な MongoDB ページネーションを実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。