mgoはGoでMongoDBを扱うためのライブラリ。
これを用いてページネーションしたい。
が、いかんせんMongoDBもmgoも初めて触ったのでよくわからない。
とりあえずmgoにはページネーションのための便利関数のようなものはなさそう。
minquery というライブラリもあるようだが、 cursor
の扱いが今ひとつ分からなかったのと、ごくシンプルな要件が実現できればよかったので自前実装することにした。
サンプルコードがNode.jsだが下記を参考にした。
Approach 1: Using skip() and limit()
を採用。
この方式は 実装が簡単だがデータ量が増えるにつれてパフォーマンス上の問題を抱える
とあるが、大したデータ量ではないのでこちらで。
サンプルコード
// 本来は引数で渡す
perPage := 10 // ページあたり件数
currentPage := 1 // 現在のページ
session, err = mgo.Dial("mongodb://mongo/test")
if err != nil {
log.Fatalln(err)
}
db = session.DB("test")
var people []*Person
q := db.C("people").Find(bson.M{}).Skip(perPage * (currentPage - 1)).Limit(perPage)
q.All(&people)