MongoDB:关于不使用skip进行分页
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){
//...
})
}