如何将mongodb查询分割成结果页面

我有学习应用程序,只创build用户,pipe理会话和删除用户。 后端在Node.js中

我有检索用户列表的查询

var userList = function ( page, callback ) { user.find({}, function ( err, doc ) { if (err) { callback (err); } callback ( doc ); }); }; 

然后我有处理程序,将其发送回应用程序

 var userList = function ( req, res ) { var page = req.param.page; models.account.userList( page, function ( result ) { res.json ( 200, result ); }); }; 

在客户端,我将结果显示在浏览器的表格中。

我想要完成的是将列表分成几页…可以说…每个用户10个。 所以使用函数userList的参数页,我期望发送正确的答案:

第1页:结果0到9第2页:结果10到19等

我可以做一个循环来提取我想要的东西,但我确定从查询接收整个用户列表重新处理它的循环只提取10个用户是不正确的做法,但我不明白什么正确的做法是。

我已经google了,但没有find我想要的答案。 也快速检查MongoDB文档。

你可以猜到我是新来的。

你能帮我指导一下这个简单的任务吗?

非常感谢你。

使用bduran代码,我可以做我想要的分页。 答案之后的代码是:

 var userList = function ( page, itemsPerPage, callback ) { user .find() .skip( (page - 1) * itemsPerPage ) .limit ( itemsPerPage ) .exec ( function ( err, doc ) { if (err) { //do something if err; } callback ( doc ); }); }; 

最简单直接的方法是使用跳过和查询。 您select例如十个元素的页面,然后每页跳过该数字的十倍。 使用这种方法,你不需要获取所有的元素,如果查询是按照索引sorting的,

 user .find() .skip((page-1)*10) .limit(10) .exec(function(err, doc){ /*Rest of the logic here*/ }); 

如果您需要以非自然顺序( 使用.sort )对结果进行sorting,则需要在数据库中创build一个索引以加快和优化查询。 你可以用.ensureIndex 。 在terminal把你用来做的查询,你就完成了。

 db.user.ensureIndex({ createdAt: -1 })