【发布时间】:2016-11-22 22:23:51
【问题描述】:
我想按字段x 对所有文档进行排序(多个文档可以在此字段上具有相同的值)。然后每次我按“下一步”时,它都会加载另外 10 个文档。
如果多个文档具有相同的值,则可以在其中任意顺序显示,没关系。
由于skip() 在大型数据集上效率低下,如何有效地做到这一点?不需要分页数,只需要无限滚动。
【问题讨论】:
标签: mongodb sorting mongoose database
我想按字段x 对所有文档进行排序(多个文档可以在此字段上具有相同的值)。然后每次我按“下一步”时,它都会加载另外 10 个文档。
如果多个文档具有相同的值,则可以在其中任意顺序显示,没关系。
由于skip() 在大型数据集上效率低下,如何有效地做到这一点?不需要分页数,只需要无限滚动。
【问题讨论】:
标签: mongodb sorting mongoose database
如果您不需要分页数,那么您可以只使用单调递增的唯一 id 值;例如_id 和ObjectId()。
使用您的示例:
/* Value of first scroll record, and to be updated every iteration */
var current_id;
var scroll_size = 10;
db.collection.find({_id: {$lt: current_id}}).
limit(scroll_size).
sort({
_id: -1,
x: 1 // Depending on your use case
});
上面的示例将为您提供最近的记录。根据您的用例,您必须决定如何处理新插入的文档。
如果您使用与_id 不同的字段来滚动浏览,请确保在该字段上添加适当的indexes。
【讨论】:
sort() 的示例中所见,结果同时按_id 和x 排序。您也可以尝试 A)在匹配部分中包含 x 以及 _id 或 B)仅在匹配部分中使用“x”。 'x' 的值是多少?
x 排序,但如果按x 排序更改了顺序,这将不再正常工作,因为您的{_id: {$lt: current_id} 不再有意义。