使用cursor.min()在MongoDB中使用mgo進行高效分頁
MongoDB的分頁功能,通常使用Query.Skip()和Query實作.Limit(),當頁數增加時可能會變慢。為了解決這個問題,MongoDB 引入了cursor.min(),它允許指定第一個索引條目來開始列出結果。
mgo.v2 的限制
不幸的是, mgo.v2 驅動程式缺乏對cursor.min() 的支援。不過,可以使用 Database.Run() 方法來執行 MongoDB 指令(包括 find 指令)來實作此功能。
手動實作高效分頁
使用github.com/icza/minquery
minquery 包提供了一個包裝器,可以簡化使用cursor.min 執行find 命令的過程() 支援。
q := minquery.New(session.DB(""), "users", bson.M{"country" : "USA"}). Sort("name", "_id").Limit(10) // If this is not the first page, set cursor: if cursor := getLastCursor(); cursor != "" { q = q.Cursor(cursor) } var users []*User newCursor, err := q.All(&users, "country", "name", "_id")
注意: 當使用 minquery.All(),在解碼結果時指定遊標欄位的名稱,即使不直接使用也是如此。這對於產生後續查詢的遊標資料至關重要。
以上是如何在沒有本地cursor.min()支援的情況下使用mgo.v2在MongoDB中實作高效分頁?的詳細內容。更多資訊請關注PHP中文網其他相關文章!