2010-01-13 25 views
17

我一直在使用MongoDB和RoR來存儲日誌數據。我提取數據並尋找結果。有沒有人使用MongoDB進行分頁,或者知道可能會幫助我啓動的任何資源?分頁與MongoDB

乾杯

EEF

回答

37

分頁MongoDB中可以使用的limit()skip()的組合來實現。

例如,假設我們的活動數據庫中有一個名爲users的集合。

>> db.users.find().limit(3) 

這將爲我們檢索前三個用戶文檔的列表。請注意,這是本質上是相同的寫作:

>> db.users.find().skip(0).limit(3) 

在接下來的三年中,我們可以這樣做:

>> db.users.find().skip(3).limit(3) 

這跳過前三個用戶記錄,併爲我們提供了未來三年。如果數據庫中只有一個用戶,請不要擔心; MongoDB足夠聰明,只返回當前的數據,不會崩潰。

這可以概括如此,並且大致相當於您在Web應用程序中執行的操作。假設我們有變量稱爲PAGE_SIZE被設置爲3,和一個任意PAGE_NUMBER

>> db.users.find().skip(PAGE_SIZE * (PAGE_NUMBER - 1)).limit(PAGE_SIZE) 

我不能直接對如何運用在Ruby on Rails的這種方法說話,但我懷疑紅寶石的MongoDB庫公開這些方法。

+1

謝謝,這似乎做的工作,但現在Ruby抱怨跳過參數必須是int,嘆氣,謝謝你:) – RailsSon 2010-01-14 13:07:13

+2

我已閱讀不使用'skip()',因爲範圍更適合分頁。 – 2012-09-26 13:18:51

+0

是否有更好的選擇跳過()@tq? – film42 2013-04-01 03:37:00