MongoDB中的分頁技術:超越skip()的限制
一般人普遍認為MongoDBskip()方法隨著資料的成長,分頁可能會導致效能問題。為了應對這項挑戰,另一種方法是利用 _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中文網其他相關文章!