mongodb 分页问题

2013-12-03 22:55:29 +08:00
 housne
{id:1, title:xxx}
{id:2, title:xxx}
{id:3, title:xxx}
{id:4, title:xxx}
{id:5, title:xxx}
{id:6, title:xxx}
...
...

每页会显示20条数据,最开始的写的是 collection.find(id:{$gt:page*20}).limit(20);
但如果中间删除了一条数据,就会取到 id = 21 , 而第二页的是从 id = 21 开始的,这样就会显示重复的数据 。。。。
4265 次点击
所在节点    MongoDB
7 条回复
YuHong
2013-12-03 23:06:39 +08:00
思路是否不对?
collection
.find(null)
.skip(0)
.limit(20)
.sort({id:1})
.exec(fn)
housne
2013-12-03 23:15:19 +08:00
@YuHong 嗯,是能用到 skip ,但据说 skip 会很慢,特别是这个数据库比较大的时候
GitFree
2013-12-04 09:30:31 +08:00
如果删除的是不是第一项,skip 0岂不是要跳过第一项
LeonT
2013-12-04 12:26:07 +08:00
必须用skip,查询加索引
loveshouhu
2013-12-11 15:23:40 +08:00
k = g.db.yiyu.find({"title" :{"$ne": ""}})
loveshouhu
2013-12-11 15:26:29 +08:00
上条回复请忽略,手残了。直接按了crtl+enter了。。。

k = db.find({"title" :{"$ne": ""}})
result = k.sort("post_time", -1).limit(10).skip((start-1)*10)

我是这么写的。使用正常。
删除了也会正常排列的。
yuanta11
2014-01-14 15:18:59 +08:00
@YuHong 逻辑上貌似sort应该放在skip + limit前面,这里有个介绍http://mr-ping.com/post/UtTaZsbMyPb4FQT5
这种方式10W以下数据问题不大

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/91700

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX