使用mgo 和自定義游標管理在MongoDB 中進行高效分頁
問題:
當mgo 時.v2 提供內建分頁方法(Query.Skip()和Query.Limit()),對於大型結果列表,它們變得低效,因為需要在跳過前 x 個文件(由 Skip() 確定)之前迭代所有文件。
解決方案:
MongoDB提供了cursor.min()來跳到想要的結果,減少處理的文件數量。然而,mgo.v2 缺乏對指定cursor.min()的原生支援。
Database.Run() 和Find Command:
利用cursor.min()如果沒有本機支持,我們可以使用Database.Run() 來執行帶有自訂查詢的find 命令,其中我們指定min參數來表示所需的起始索引
編碼遊標資料:
執行查詢後,我們需要從結果的第一批中取得遊標資料。為了有效地儲存和傳輸這些數據,我們可以使用 bson.Marshal() 結合 Base64 編碼來產生網路安全的遊標字串。
遊標管理:
為了管理頁面之間的遊標,我們可以分別使用 base64 和 bson 編碼對它們進行解碼和重新編碼。這確保了能夠從我們停止的地方恢復查詢。
使用github.com/icza/minquery:
或者,我們可以使用minquery 包,它提供一個包裝器來配置和執行具有遊標規範的MongoDB 查找命令。它簡化了管理頁面之間遊標的過程。
程式碼片段:
自訂遊標管理(手動方法):
query := mgo.Query{ Limit: 10, } if min != nil { query = query.Skip(1).Min(min) }
minminquery方法:
query := minquery.New(). Cursor(cursor). Limit(10)
以上是如何使用 mgo.v2 在 MongoDB 中針對大型結果集實現高效分頁?的詳細內容。更多資訊請關注PHP中文網其他相關文章!