我在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 matching your query.");
else
DocModel.count({})
.then(number => {
console.log(JSON.stringify({number, docs}));
});
})
.catch(console.log);
为实现这一点,我做了:
find
使用参数查询limit
和skip
从正确的页面获取结果docs
不为空,请启动count
查询这里的问题,因为我在查询中需要分页,我必须向DB(find
和count
)发出2个单独的请求,这些请求可能非常繁重。
为了优化这一点,我想避免count
查询,但我不知道如何。
另一个问题是嵌套的promises反模式,但这不是我现在想关注的问题。
我愿意接受有关改进此代码的任何建议!
答案 0 :(得分:1)
您可以安装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);
}
}
之后
System.out.println("If you want to leave, type \"quit\"");
System.out.println("If you want to play again,type\"yes\" ");
Scanner input = new Scanner(System.in);
String s=input.next();
if(s.equals("quit")) {
System.out.println("Thanks for playing the game!");
System.exit(0);
}
if (s.equals("yes")) {
String userInput = input.nextLine();
userInput = userInput.toUpperCase();
startGame();
希望这对你有用。谢谢: - )