如何检索早于特定ID的文档?

时间:2016-05-30 11:52:07

标签: node.js mongodb mongoose

我有大量由用户创建的帖子。当用户向下滚动时,我将加载另外20个帖子并将它们推送到页面(如无限滚动)。

为实现这一目标,我需要检索比最后加载的帖子ID更旧的文档。

我在我的应用程序中使用Mongoose,所以这就是我写它的方式:

Post.find({"_id": {"$gt": myLastId}}).limit(20).sort({"created": -1}).exec(function(err, posts) {...}

虽然从逻辑上讲,我看不到这个有效,因为我的所有帖子ID都是由Mongoose生成的GUID(例如574c255db7fdb529fb38c5ab)。

我可以使用created属性(创建时默认为Date.now()),虽然在同一时间创建帖子的情况下会发生什么情况?

我能想到的另一种方法是在架构中创建index,从0开始整合,我可以找到下一个比{1}更早的帖子index通过。这是一个好方法,还是有更好的方法呢?

2 个答案:

答案 0 :(得分:1)

您使用{"_id": {"$gt": myLastId}}的方法实际上很好。 MongoDB ID对创建时间进行编码,这就是它的工作原理。 (请参阅docsthis explanatory blog。)

添加增量索引需要集合级锁定,因此对于大量写入可能会有问题。

答案 1 :(得分:0)

将其视为任何其他分页功能?即保留页面索引,resultsPerPage变量,计算在搜索或客户端下一个请求后跳过和更新页面索引的数量?

我不使用mongoose所以这是一个原生的例子:

collection.find({}).limit(resultsPerPage).skip(resultsPerPage*(page-1))

或类似的东西,你应该明白这个想法。但是你应该尽量避免大跳过,但我不认为这个问题是关于优化的。