egg.js Mongoose实现分页的方法

发布于 5 年前 作者 zdingfeng 6204 次浏览 最后一次编辑是 5 年前 来自 分享

一、数据库分页查询数据的原理算法

规则:规定每页20条数据的查询方式 查询第一页(page=1): db.表名.find().skip(0).limit(20)

查询第二页(page=2): db.表名.find().skip(20).limit(20)

查询第三页(page=3): db.表名.find().skip(40).limit(20)

规则:规定每页8条数据的查询方式 查询第一页(page=1): db.表名.find().skip(0).limit(8)

查询第二页(page=2): db.表名.find().skip(8).limit(8)

查询第三页(page=3): db.表名.find().skip(16).limit(8)

查询第四页(page=4): db.表名.find().skip(24).limit(8)

总结:分页查询的sql语句

db.表名.find().skip((page-1)*pageSize).limit(pageSize)

2、 egg.js Mongoose实现分页的方法

Person.
  find({
    occupation: /host/,
    'name.last': 'Ghost',
    age: { $gt: 17, $lt: 66 },
    likes: { $in: ['vaporizing', 'talking'] }
  }).
  limit(10).
  sort({ occupation: -1 }).
  select({ name: 1, occupation: 1 }).
  exec(callback);



// Using query builder
Person.
  find({ occupation: /host/ }).
  where('name.last').equals('Ghost').
  where('age').gt(17).lt(66).
  where('likes').in(['vaporizing', 'talking']).
  limit(10).
  sort('-occupation').
  select('name occupation').
  exec(callback);

3、egg.js 后台代码

async index() { 
        

         var page=this.ctx.request.query.page || 1;

         var pageSize=3;
        
         //获取当前数据表的总数量

         var totalNum=await this.ctx.model.Goods.find({}).count();

         var goodsResult=await this.ctx.model.Goods.find({}).skip((page-1)*pageSize).limit(pageSize);
               
          await this.ctx.render('admin/goods/index',{
            list:goodsResult,
            totalPages:Math.ceil(totalNum/pageSize),
            page:page

          });
      }     

4、前台页面使用jqPaginator分页插件

http://jqpaginator.keenwon.com

1、首先引入jQuery和jqPaginator

2、定义一个空的div 让这个div的class pagination

https://v3.bootcss.com/components/#pagination

3、初始化

    <script>
            
                $('#page').jqPaginator({
                    totalPages: <%=totalPages%>,
                    visiblePages: 8,
                    currentPage:  <%=page%>,
                    onPageChange: function (num, type) {
                        console.log('当前第' + num + '页',type);

                        if(type=='change'){

                        location.href="/admin/goods?page="+num;
                        }
                    }
                });            
            </script>


1 回复

谢谢分享 egg.js结合jq插件实现分页的思路不错

回到顶部