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 サイトの他の関連記事を参照してください。