我有学习应用程序,只创建用户,管理会话和删除用户。后端位于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的参数Page,我希望能够发送正确的答案:
第1页:结果0到9 第2页:结果10到19 等
我可以做一个循环来提取我想要的东西,但我确信从查询中收到整个用户列表在循环上重新处理它只能提取10个用户不是正确的方法,但我无法想象找出正确的方法。
我已经用Google搜索了,但找不到我想要的答案。还快速查看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 );
});
};
答案 0 :(得分:1)
最简单直接的方法是使用跳过和查询。您可以选择十个元素的页面,然后跳过每页数十倍的页面。使用此方法,您不需要获取所有元素,如果查询已排序,并且索引非常快:
user
.find()
.skip((page-1)*10)
.limit(10)
.exec(function(err, doc){
/*Rest of the logic here*/
});
如果需要以非自然顺序(with .sort
)对结果进行排序,则需要在数据库中创建索引以加速和优化查询。你可以做with .ensureIndex
。在终端中放置您用来执行的查询,您就完成了。
db.user.ensureIndex({ createdAt: -1 })