当前位置:  开发笔记 > 编程语言 > 正文

如何实现分页和与猫鼬合计

如何解决《如何实现分页和与猫鼬合计》经验,为你挑选了1个好方法。

我还没有找到如何返回结果集中包含的总数据的方法。有什么办法可以返回总数据?我需要确认是否返回了正确的JSON数据。

我想要的是返回这样的内容:

total: 40,
page: 1,
pageSize: 3,
books: [
{
    _id: 1,
    title: "?·???? ",
    author: "[?] ?·??",
},
{
   _id: 2,
   title: "???????",
   author: "???",
 },
 {
    _id: 3,
    title: "???",
    author: "[?] ???",
   }
 ]
}

当前代码:

router.get('/booksquery', (req, res) => {

var page = parseInt(req.query.page) || 1;
var limit = parseInt(req.query.limit) || 3;

Book.find({})
    .sort({ update_at: -1 })
    .skip((page-1) * limit)
    .limit(limit)
    .exec((err, doc) => {
        if (err) {
            res.json(err)
        } else {
            res.json({
                total: doc.total,
                page: page,
                pageSize: limit,
                books:doc,
            });
        }
    })
 })

Saikat Chakr.. 8

可能您可以执行以下操作:

仅当当前页面索引默认为0并且分页从下一页开始(即1)时,您才可以执行.skip(page * limit)确保.skip()和.limit()获得Number。

  router.get("/booksquery", (req, res) => {
  var page = parseInt(req.query.page) || 0; //for next page pass 1 here
  var limit = parseInt(req.query.limit) || 3;
  var query = {};
  Book.find(query)
    .sort({ update_at: -1 })
    .skip(page * limit) //Notice here
    .limit(limit)
    .exec((err, doc) => {
      if (err) {
        return res.json(err);
      }
      Book.countDocuments(query).exec((count_error, count) => {
        if (err) {
          return res.json(count_error);
        }
        return res.json({
          total: count,
          page: page,
          pageSize: doc.length,
          books: doc
        });
      });
    });
});

从上方您将收到如下响应:

 {
  books: [
    {
      _id: 1,
      title: "?·???? ",
      author: "[?] ?·??"
    },
    {
      _id: 2,
      title: "???????",
      author: "???"
    },
    {
      _id: 3,
      title: "???",
      author: "[?] ???"
    }
  ],
  total: 3,
  page: 0,
  pageSize: 3
}

如果您使用任何条件,并且想要在该条件之上进行查询并获得结果和总计。在里面做var query ={}。并且相同的查询也将用于.count()。因此您可以total 依靠该条件的基础知识。



1> Saikat Chakr..:

可能您可以执行以下操作:

仅当当前页面索引默认为0并且分页从下一页开始(即1)时,您才可以执行.skip(page * limit)确保.skip()和.limit()获得Number。

  router.get("/booksquery", (req, res) => {
  var page = parseInt(req.query.page) || 0; //for next page pass 1 here
  var limit = parseInt(req.query.limit) || 3;
  var query = {};
  Book.find(query)
    .sort({ update_at: -1 })
    .skip(page * limit) //Notice here
    .limit(limit)
    .exec((err, doc) => {
      if (err) {
        return res.json(err);
      }
      Book.countDocuments(query).exec((count_error, count) => {
        if (err) {
          return res.json(count_error);
        }
        return res.json({
          total: count,
          page: page,
          pageSize: doc.length,
          books: doc
        });
      });
    });
});

从上方您将收到如下响应:

 {
  books: [
    {
      _id: 1,
      title: "?·???? ",
      author: "[?] ?·??"
    },
    {
      _id: 2,
      title: "???????",
      author: "???"
    },
    {
      _id: 3,
      title: "???",
      author: "[?] ???"
    }
  ],
  total: 3,
  page: 0,
  pageSize: 3
}

如果您使用任何条件,并且想要在该条件之上进行查询并获得结果和总计。在里面做var query ={}。并且相同的查询也将用于.count()。因此您可以total 依靠该条件的基础知识。


谢谢您帮我解决!
不推荐使用`count`。如果数量很大,请使用`countDocuments`或`estimateCountDocuments`。[猫鼬计数](https://mongoosejs.com/docs/api.html#model_Model.count)
推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有