Javascript Mongoose:改进find()和count()查询 背景
我在Mongoose中有一个查询,找到一组对象,然后返回这些对象及其总数:Javascript Mongoose:改进find()和count()查询 背景,javascript,node.js,mongodb,mongoose,es6-promise,Javascript,Node.js,Mongodb,Mongoose,Es6 Promise,我在Mongoose中有一个查询,找到一组对象,然后返回这些对象及其总数: var itemsPerPage = 4, pageNum = 1; Survey.find({}) .limit(itemsPerPage) .skip(itemsPerPage * pageNum) .then(docs => { if (docs.length === 0) console.log("There are no results m
var itemsPerPage = 4, pageNum = 1;
Survey.find({})
.limit(itemsPerPage)
.skip(itemsPerPage * pageNum)
.then(docs => {
if (docs.length === 0)
console.log("There are no results matching your query.");
else
DocModel.count({})
.then(number => {
console.log(JSON.stringify({number, docs}));
});
})
.catch(console.log);
为了实现这一目标,我采取了以下措施:
find
使用参数查询limit
和skip
从正确的页面获取结果单据
不为空,则启动计数
查询find
和count
),这可能会非常繁重
为了优化这一点,我想避免使用count
查询,但我不知道如何进行
另一个问题是嵌套承诺反模式,但这不是我现在要关注的问题
问题:
我愿意接受任何关于改进此代码的建议 您可以安装,这样更容易安装
npm install mongoose-paginate
之后
/**
* querying for `all` {} items in `MyModel`
* paginating by second page, 10 items per page (10 results, page 2)
**/
MyModel.paginate({}, 2, 10, function(error, pageCount, paginatedResults) {
if (error) {
console.error(error);
} else {
console.log('Pages:', pageCount);
console.log(paginatedResults);
}
}
希望这对你有用。谢谢:-)对于嵌套的承诺,请这样做:使用它到目前为止,我很喜欢它。我确实对预测有问题,但我不认为这会是一个很大的问题,至少现在我找到了一个解决办法。谢谢