Mongoose分页查询,如果数据太多怎么办?
router.post('/index/pagelist',function(req,res){
var count=0;
var page=req.body.page;
var rows=req.body.rows;
var stuname=req.body.username;
console.log(stuname);
console.log("page:"+page+",rows:"+rows);
**var query=student.find({});**
query.skip((page-1)*rows);
query.limit(rows);
if(stuname){
query.where('stuname',stuname);
}
//计算分页数据
query.exec(function(err,rs){
if(err){
res.send(err);
}else{
//计算数据总数
student.find(function(err,result){
jsonArray={rows:rs,total:result.length};
res.json(jsonArray);
});
}
});
});
调试的时候一到student.find({}),页面就一点动静也没有了。数据库中存有8W+条数据,但是要,求总数不是需要把数据都查找一边吗?这样应该如何处理呢?刚学习node.js,这是网上的例子,想跑跑看看。
6 回复
有现成的插件
来自酷炫的 CNodeMD
skip的效率过低 一般可以使用基于上次结果排序之后只用limt 例: 不用skip对结果进行分页
最简单的分页方法:
var page1=db.refactor.find().limit(100)
var page2=db.refactor.find().skip(100).limit(100)
var page3=db.refactor.find().skip(200).limit(100)
楼主你就是这种 试试下面这种 但是,一般来说可以找到一种方法实现不用skip的分页,这取决于查询本身.
如:要按照"date"降序显示文档
var page1=db.refactor.find().sort({"date":-1}).limit(100)
然后利用最后一个文档中"date"的值作为查询条件,获取下一页:
var last=null
while(page1.hasNext())
{
last=page1.next();
display(last);
}
var page2=db.refactor.find({"date":{"$gt":last.date}});
page2.sort({"date":-1}).limit(100)
代码来自: 《mongo权威指南》
@satanmonkey 在网上找了几个插件,查询4W+条都可以查询出来,可是一查询8w+这个量级的数据,就会直接返回空
@gjc9620 用了这种查询反而变得更慢了一点,问题依旧,如果数据多(8w+),node.js直接就返回空
@WiseWolfs 用的什么插件?