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

时间:2014-07-11 02:49:14

标签: javascript node.js mongodb mongoose

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

我目前有:

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

加载具有最高"等级"的10个帖子。我如何为下一个 10个帖子做这个?

1 个答案:

答案 0 :(得分:11)

“分页”的一般概念是使用.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);

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

但是尝试对此进行调整,因为范围查询通常是您的最佳效果。