Mongoose分页查询,如果数据太多怎么办? - CNode技术社区

Mongoose分页查询,如果数据太多怎么办?
发布于 10 年前 作者 WiseWolfs 12226 次浏览 最后一次编辑是 9 年前 来自 问答
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 用的什么插件?

回到顶部

AltStyle によって変換されたページ (->オリジナル) /