javascript – 延迟加载/更多数据滚动Mongoose / Nodejs

我想知道如何使用mongoose实现延迟加载/滚动更多数据.我想一次加载10个帖子,但我不确定如何最好地加载查询中的下10个元素.

我目前有:

var q = Post.find().sort("rating").limit(10);

加载具有最高“评级”的10个帖子.我如何为接下来的10个帖子做这个?

解决方法:

“分页”的一般概念是使用.skip(),它基本上“跳过”已经检索过的结果,因此你基本上可以这样做:

var q = Post.find().sort( "rating" ).skip(10).limit(10);

但实际上,正如你可以想象的那样,当你获得一些“页面”时,这将会大大减慢.所以你真的想要更聪明的东西.本质上,这是一个“范围查询”,您希望获得比检索到的最后一组结果更高(或更低,如果下降)的结果.所以给定最后一个值为5然后比你做的更大:

var q = Post.find({ "rating": { "$gt": 5 } }).sort( "rating" ).limit(10);

看起来没关系,但确实还有问题.如果下一个“页面”还包含评分为5的结果怎么办?此查询将跳过这些并且永远不会显示它们.

聪明的做法是“保留”文档中的所有_id值,因为它们是唯一键.基本上应用相同类型的东西,除非这次你确保你没有在新的页面中包含上一页的结果. $nin操作符在此帮助:

var q = Post.find({ "rating": { "$gte": 5 }, "_id": { "$nin": seenIds } })
    .sort( "rating" ).limit(10);

seeIds是否只是结果的最后一页还是更多取决于您要排序的值的“密度”,当然您需要将这些“保留”在会话变量或其他内容中.

但请尝试对此进行调整,因为范围查询通常是您最佳的性能结果.

上一篇:javascript – underscore.js .keys和.omit无法按预期工作


下一篇:[jQuery]使用jQuery.Validate进行客户端验证(初级篇)