MongoDB:关于不使用skip进行分页
发布于 12 年前 作者 douya0808 14874 次浏览 最后一次编辑是 8 年前

MongoDB权威指南给出了这样的分页示例

一般来讲可以找到一种方法不用skip的分页,这取决于查询本身。例如,要按照"date"降序显示文档。可以用如下方式获取结果的第一页:
> var page1=db.foo.find().sort({"date":-1}).limit(100)
然后,可以利用最后一个文档中"date"的值作为查询条件,来获取下一页:
var latest=null;

//display first page
while(page1.hasNext()){
    latest=page1.next();
    display(latest);
}

//get next page
var page2=db.foo.find({"date":{"$gt":latest.date}});//游标已下移动,当前游标位置为下一页的第一项
page2.sort({"date":-1}).limit(100);

这里只是手动的分了两页,如果想应用到程序中该如何实现呢?每页100个数据,如果我想看第7页的数据,是不是应该以传入参数的形式,如:paging(100,6)来进行呢? var pageSize; var page; var page1=db.foo.find().sort({“date”:-1}).limit(pageSize*page)

有实际操作过的前辈吗?

3 回复

以游标作分页的话,应该不能随意换页,须以$gt$lt查询 因为没有游标,所以想看第7页只能用skip

大哥你好 这个书上不使用skip的示例只给出了第一页和第二页,再往后该怎么弄我就想不出来了 赏我个思路呗

可以参考 https://developers.facebook.com/docs/reference/api/pagination/ 以express为例:

exports.getItem = function(req, res){
  var cursor = {};
  if(req.query){
  	if(req.query.until)cursor.$lt = req.query.until;
  	if(req.query.since)cursor.$gt = req.query.since;
  }
  db.col.find({"date": cursor},).toArray(function(err, item){
    //...
  })
}
回到顶部