Skip to content

传统的分页查询

javascript
db.users
  .find(conditions)
  .sort({ _id: -1 })
  .skip((page - 1) * numberOfPage)
  .limit(numberOfPage);

从上面的代码可以看出这就是很传统的没有经过优化的分页查询,根据传入的页数和每页数量的来查询到所要的数据。很明显这里有个很大的缺陷,就是skip()这个东西大家都知道他需要一条一条的遍历,一旦集合的数据量大的时候速度会相当慢。

优化

一般分页查询中都是前端保存页数的变量来作为后端查询的关键变量,但是前面说了这样的弊端。所以很多优化都是找一个惟一值来作为查询条件,并且加上索引来加快查询速度。当然这首先最优的就是_id,只要拿到上次查找的最后一条数据的_id,这篇文章也主要是讲解这个MongoDB特殊的值。

javascript
db.users
  .find(...conditions,{'$lt': _id})
  .sort({_id: -1})
  .limit(numberOfPage)

ObjectID

本来写了挺多,但是后面看到其实早就有人写了一篇比我更好的文章来讲解关于ObjectID,所以就不班门弄斧了,再最后奉上链接吧。