首頁 > web前端 > js教程 > 主體

如何使用_id和前向分頁在MongoDB中實現高效分頁?

Mary-Kate Olsen
發布: 2024-10-24 06:55:02
原創
980 人瀏覽過

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

如何在MongoDB 中實現分頁

雖然由於大規模記憶體消耗,通常不鼓勵使用Skip 進行分頁,但另一種方法是利用_id 字段進行自然排序。

取得最後一個文件的_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 的自然順序,程式碼如下所示this:

<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和前向分頁在MongoDB中實現高效分頁?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!