【问题标题】:how to efficient paging in mongodb [duplicate]如何在mongodb中高效分页[重复]
【发布时间】:2016-11-22 22:23:51
【问题描述】:

我想按字段x 对所有文档进行排序(多个文档可以在此字段上具有相同的值)。然后每次我按“下一步”时,它都会加载另外 10 个文档。

如果多个文档具有相同的值,则可以在其中任意顺序显示,没关系。

由于skip() 在大型数据集上效率低下,如何有效地做到这一点?不需要分页数,只需要无限滚动。

【问题讨论】:

    标签: mongodb sorting mongoose database


    【解决方案1】:

    如果您不需要分页数,那么您可以只使用单调递增的唯一 id 值;例如_idObjectId()

    使用您的示例:

    /* 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

    【讨论】:

    • 但这并没有给出按 x 排序的记录,对吧?这是按_id排序的
    • 如您在sort() 的示例中所见,结果同时按_idx 排序。您也可以尝试 A)在匹配部分中包含 x 以及 _id 或 B)仅在匹配部分中使用“x”。 'x' 的值是多少?
    • @WanBachtiar 是的,它按x 排序,但如果按x 排序更改了顺序,这将不再正常工作,因为您的{_id: {$lt: current_id} 不再有意义。
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 2014-12-16
    • 2010-12-24
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    相关资源
    最近更新 更多