MongoDB - 使用分数排序对记录进行分页的问题

时间:2016-08-05 10:48:54

标签: node.js mongodb sorting mongoose pagination

我们说我有3条记录这些分数:

{_id: 3, score: 0}, {_id: 20, score: 2.5}, {_id: 1, score: 0}

现在,我以这种方式查询

Model.find({
  score: {$lt: lastScore}
})
.sort({score: -1})
.limit(2)

lastScore 是从此查询中找到的最新记录的得分。这样,在下一次迭代中,我可以获得以下记录页面,而不包括以前的记录。

但是存在一个很大的问题,让我们看看这个查询会发生什么:

首先,将按分数排序的2条记录:{_id: 20, score: 2.5}, {_id: 3, score: 0}。因此, lastScore 将等于0.如果您看到上述内容,我使用score: {$lt: lastScore},因此在下一次迭代中,将找不到最新记录(0不小于 lastScore ,也是0)。所有具有相同分数的记录都会出现此问题。

您是否有关于如何实施分页的建议,使用Mongoose的分数排序?

PS:快速解决方案是使用.skip()方法,但对于大型集合并不是很好,我需要一个可扩展的解决方案

1 个答案:

答案 0 :(得分:0)

使用.skip()方法加数,暂时没有其他解决方案。