如何将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 })