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

回到顶部