我还没有找到如何返回包含在结果集中的全部数据。有没有办法返回全部数据?我需要确认返回了正确的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,
});
}
})
})发布于 2018-01-30 21:00:10
也许你可以这样做:
限制仅当当前页索引为默认值0并且分页从下一页开始时,即1,您可以执行限制(
*.skip),确保.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关于这个条件的基础知识。
发布于 2020-08-18 06:28:22
如果有人想在2020年使用async/await和一些随机查询而不是空对象来查看这一点。请记住,使用查询筛选器不能使用estimatedDocumentCount,需要通过使用查询对其执行countDocuments。请检查:
const { userId, page, limit } = req.headers;
const query = {
creator: userId,
status: {
$nin: ['deleted'],
},
};
const page_ = parseInt(page, 10) || 0;
const limit_ = parseInt(limit, 10) || 12;
const books = await BookModel.find(query)
.sort({ update_at: -1 })
.skip(page_ * limit_)
.limit(limit_);
const count = await BookModel.countDocuments(query);发布于 2020-07-07 00:22:44
count()已被弃用(格式为mongoose@5.x)。对于大型集合,estimatedDocumentCount()比使用countDocuments()更快,因为estimatedDocumentCount()使用集合元数据而不是扫描整个集合。参考:https://mongoosejs.com/docs/api/model.html#model_Model.estimatedDocumentCount
所以代码是完美的,只需将countDocuments替换为estimatedDocumentCount
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.estimatedDocumentCount(query).exec((count_error, count) => {
if (err) {
return res.json(count_error);
}
return res.json({
total: count,
page: page,
pageSize: doc.length,
books: doc
});
});
});
});https://stackoverflow.com/questions/48521896
复制相似问题