避免使用skip略过大量结果

引子

   分页的时候我们会经常想到用skip。事实上用skip略过少量文档还是不错的,但是数据库非常多的话,skip就会比较慢(几乎每个数据库都会有这个问题,不仅仅是mongodb),所以要尽量避免。通常可以向文档本身内置查询条件来避免过大的skip,或者利用上次的结果来计算下一次查询。

不用skip对结果分页 ##

   最简单的分页方法就是用limit返回结果的第一页,然后将每个后续页面作为相对于开始的偏移量返回。

这里写图片描述

   然而,一般来讲可以找到一种方法实现不用skip的分页,这取决于查询本身。例如,要按照"date"降序显示文档。可以用如下方法获取结果第一页:
var page1 = db.foo.find().sort({"date":-1}).limit(100)

然后,可以利用最后一个文档中的”date”的值作为查询条件,来获取下一页:

var page2 = db.foo.find({"date":{"$gt":latest.date}});
page2.sort({"date":-1}).limit(100);
   这样查询就没有skip了。

总结

   回想自己以前也是一直用的skip处理的分页,没意识到这个问题。所以这里给大家提供一个思路,同时也给自己提个醒。代码能不能看懂都没关系,能看懂处理思路就行了。当然可能还有一些别的办法可以处理这个问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值