【问题标题】:how to do pagination using mongoengine?如何使用 mongoengine 进行分页?
【发布时间】:2012-11-10 11:17:53
【问题描述】:

我有一个关于使用 mongodb 和 mongoengine 进行分页的问题。 我有一张表,将来会有数百万条记录。我正在做这样的分页。

我不确定这是正确的方法

    list = Books.objects.all()
    paginator = DiggPaginator(list, 20, body = 10, tail = 2)

在这里,我打开整个表格,然后进行分页,然后我们再次进入下一页,上面的代码运行并带来第二页或任何页面。

这是正确的方法还是有更好的方法来做到这一点。

【问题讨论】:

    标签: django mongodb pagination mongoengine


    【解决方案1】:

    您可以使用QuerySet中的skiplimit来实现分页。
    例如,如果您想显示第二页,每页限制为 10 个项目,您可以这样做:

    page_nb = 2 
    items_per_page = 10 
    
    offset = (page_nb - 1) * items_per_page
    
    list = Books.objects.skip( offset ).limit( items_per_page )
    

    【讨论】:

    • 这是否意味着我的方法不正确?或者这也可以正常工作,而不会给服务器带来任何额外的负载。
    • 通过使用Books.objects.all(),您可以从表中请求所有文档,因此如果您的表有数百万条记录,则会给服务器带来一些负载。无论如何,设置一个基准来测试什么对您的用例最有效应该是微不足道的。
    【解决方案2】:

    flask-mongoengine 插件有一个 paginator 的示例,您可以适应 digg 分页器。

    【讨论】:

      【解决方案3】:

      您也可以使用更体面和可读性更高的数组切片语法:

      begin = (page - 1) * page_size # offset
      end = offset + page_size
      list = Books.objects[begin:end]()
      

      【讨论】:

        猜你喜欢
        • 2015-07-23
        • 2018-06-10
        • 2013-03-27
        • 2019-02-03
        • 1970-01-01
        • 2011-06-17
        • 2018-03-04
        • 2013-06-16
        • 1970-01-01
        相关资源
        最近更新 更多