2010-01-13 50 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