ホームページ > ウェブフロントエンド > jsチュートリアル > 順方向のみのページネーションと順序付けにより、MongoDB のページネーションの制限を取り除くことができますか?

順方向のみのページネーションと順序付けにより、MongoDB のページネーションの制限を取り除くことができますか?

DDD
リリース: 2024-10-24 06:31:02
オリジナル
257 人が閲覧しました

Can Forward-Only Pagination with Ordering Eliminate MongoDB's Pagination Limitations?

MongoDB のページ分割テクニック: Skip() の限界を超えて

MongoDB の Skip() メソッドに依存していることは広く知られています。データが増大すると、ページネーションによってパフォーマンスの問題が発生する可能性があります。この課題に対処するための別のアプローチは、_id フィールドの自然な順序をページネーションに利用することです。

最後のドキュメントの ID

この手法の核心は次のとおりです。前のページから最後のドキュメントの ID を特定し、それを次のページの開始点として使用します。ただし、初心者にとって、最後の ID を特定するのは難しい場合があります。

_id 順序による前方のみのページネーション

後方ページネーションや特定のページへのスキップができないシナリオの場合必要に応じて、「フォワード ページング」として知られる概念を使用できます。この手法では、カーソルを反復処理し、後続のクエリのために最後に表示されたドキュメントの _id を保存します。

_id 順序付けの例:

cursor = db.junk.find().limit(3);

while (cursor.hasNext()) {
   doc = cursor.next();
   if (!cursor.hasNext())
     lastSeen = doc._id;
}
ログイン後にコピー

複雑な順序付け

_id とは別に別の順序付けフィールドを使用すると、さらに複雑さが生じます。概念は同じですが、$nin 演算子を使用して以前に表示されたドキュメントを除外する必要があります。

ランク順の例:

seenIds = [];
cursor = db.junk.find({ "_id": { "$nin": seenIds }, "rank": "$lte": lastSeen }
).sort({ "rank": -1 }).limit(2);

while (cursor.hasNext()) {
   doc = cursor.next();
   seenIds.push(doc._id);
   if (!cursor.hasNext() || lastSeen == null)
     lastSeen = doc.rank;
}
ログイン後にコピー

結論:

前方ページングは​​、後方ページネーションが必要ないシナリオでは実行可能なオプションです。 $nin 演算子を利用し、表示されたドキュメント ID を管理することにより、この手法は、skip() に関連するメモリ消費の問題を発生させることなく、効率的なページネーションを提供します。

以上が順方向のみのページネーションと順序付けにより、MongoDB のページネーションの制限を取り除くことができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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