我有点陷入困境。我真的想要一个简单的查询。我想计算来自查询查询的所有结果,然后我想应用跳过和限制但不是第一次。简单来说,我首先想要所有物品及其数量。基于此我想在结果上应用跳过和限制。我怎么能实现这一点我被卡住了。我尝试了不同的东西,比如将第一个查询结果存储在变量中并应用find() limit() skip()
但它不起作用。
样品 这是我到目前为止所做的。
Product.find({
'category.category_name': request
},
function (err, searchedResults) {
if (err) {
return res.status(500).send("There was a problem getting the category based record .");
} else {
//Assign searched results length as product Count
productCount = searchedResults.length;
// apply ceiling - to make total pages
totalPages = Math.ceil(productCount / pageOptions.limit);
// tell the pagination what is the kind of pagination
kindOfPagination = 'searchProduct';
// call pagination func
pagination(productCount, totalPages, pageOptions.page, pageOptions.limit, kindOfPagination);
res.status(200).json({
'products': searchedResults,
'_meta': _meta
});
}
})
现在我需要应用skip
和limit
部分。喜欢这个
跳过并限制
Product.find().skip(pageOptions.page * pageOptions.limit)
.limit(parseInt(pageOptions.limit))
.exec('find', function (err, products) {
if (err) {
res.status(500).json(err);
return;
} else {
res.status(200).json({
'products': products, // consuming the product variable
'_meta': _meta
});
}
});
现在在skip
和limit
我希望应用从样本返回的结果。我怎样才能做到这一点 ?我以前试过这个。
我尝试了什么
Product.find({
'category.category_name': request
}).skip(req.query.page * 10)
.limit(parseInt(10))
.exec('find', function (err, searchedResults) {
if (err) {
return res.status(500).send("There was a problem getting the category based record .");
} else {
pageOptionsFunc(req.query.page);
//Assign searched results length as product Count
productCount = searchedResults.length;
// apply ceiling - to make total pages
totalPages = Math.ceil(productCount / pageOptions.limit);
// tell the pagination what is the kind of pagination
kindOfPagination = 'searchProduct';
// call pagination func
pagination(productCount, totalPages, pageOptions.page, pageOptions.limit, kindOfPagination);
// I am storing the results in a searchResultsSample
searchResultsSample = searchedResults;
res.status(200).json({
'products': searchedResults,
'_meta': _meta
});
}
})
请参阅searchResultsSample。现在我使用它skip
和limit
部分。喜欢这个
searchResultsSample.find().skip(pageOptions.page * pageOptions.limit)
.limit(parseInt(pageOptions.limit))
.exec('find', function (err, products) {
if (err) {
res.status(500).json(err);
return;
} else {
res.status(200).json({
'products': products, // consuming the product variable
'_meta': _meta
});
}
});
但它没有用,我得到了一个未定义的错误函数。我怎样才能做到这一点 ?
答案 0 :(得分:1)
首先计算,然后应用跳过和限制。
router.get('/products', function (req, res) {
let items_perpage = req.query.itemsperpage || 5;
let page = req.query.page || 1;
let skip = items_perpage * (page - 1);
let limit = parseInt(items_perpage);
Product.find({'category.category_name': request}).count(function (err, totalCount) {
if (err) {
logger.error(err.stack);
return res.status(500).send({ success: false, msg: 'Internal Server Error' })
}
else {
Product.find({
'category.category_name': request
}).skip(skip).limit(limit).exec(function (err, searchedResults) {
if (err) {
logger.error(err.stack);
return res.status(500).send({ success: false, msg: 'Internal Server Error' })
}
else {
let total = {}
total.count = totalCount;
if (total.count % items_perpage == 0) {
total.pages = (total.count / items_perpage);
}
else {
total.pages = (parseInt(total.count / items_perpage) + 1);
}
return res.status(200).send({ success: true, msg: 'All Products', total: total, data: searchedResults });
}
});
}
})
});