Mongoose如何实现分页和总计?
|我还没有找到如何返回结果集中包含的总数据。有什么方法可以返回总数据吗?我需要确认返回了正确的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,
});
}
})
})
网友帮我解决好了如下:
也许你可以这样做:
只有当前页面索引是0默认和分页开始下一页,即1,你可以做
.skip(page * limit)
确保.skip()
和.limit()
获取数字。
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.count(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
}