ホームページ  >  記事  >  ウェブフロントエンド  >  _id と Forward Paging を使用して MongoDB に効率的なページネーションを実装するにはどうすればよいですか?

_id と Forward Paging を使用して MongoDB に効率的なページネーションを実装するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-24 06:55:02981ブラウズ

How to Implement Efficient Pagination in MongoDB Using _id and Forward Paging?

MongoDB でページネーションを実装する方法

大規模なメモリ消費のため、ページネーションではスキップの使用は一般的に推奨されませんが、別のアプローチは次のとおりです。

最後のドキュメントの _id を取得する

特定のページの最後のドキュメントの _id を取得するには、次のコマンドを使用できます。アプローチ:

<code class="javascript">db.users.find().limit(pageSize);
//Find the id of the last document in this page
last_id = ...;</code>

前方ページング

.skip() と .limit() を使用するのではなく、前方ページングではカーソルを反復処理し、最後に表示されたデータを保存します。 _id.後続の反復では、クエリはすでに表示されているドキュメントを除外するように変更され、同時に最後に表示された値よりも小さいか等しい _id を持つドキュメントに結果を制限します。

_id による自然な順序の場合、コードは次のようになります。これ:

<code class="javascript">var lastSeen = null;
var cursor = db.junk.find().limit(3);

while (cursor.hasNext()) {
   var doc = cursor.next();
   if (!cursor.hasNext())
     lastSeen = doc._id;
}</code>

後続ページの変更されたクエリ

次のクエリは次のページを取得するために使用されます:

<code class="javascript">var cursor = db.junk.find({ "_id": { "$gt": lastSeen } }).limit(3);</code>

複雑な並べ替え

ランクなど、_id 以外のフィールドで並べ替える場合は、以前に表示されたドキュメントを追跡し、$nin 演算子を使用してそれらを除外する必要があります。

ここにあります。ランクによるソートによる前方ページングのコード スニペットの例:

<code class="javascript">var lastSeen = null;
var seenIds = [];
var cursor = db.junk.find().sort({ "rank": -1 }).limit(2);

while (cursor.hasNext()) {
   var doc = cursor.next();
   if ( lastSeen != null &amp;&amp; doc.rank != lastSeen )
       seenIds = [];
   seenIds.push(doc._id);
   if (!cursor.hasNext() || lastSeen == null)
     lastSeen = doc.rank;
}</code>

次のページに対する後続のクエリは次のようになります:

<code class="javascript">var cursor = db.junk.find(
    { "_id": { "$nin": seenIds }, "rank": "$lte": lastSeen }
).sort({ "rank": -1 }).limit(2);</code>

以上が_id と Forward Paging を使用して MongoDB に効率的なページネーションを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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