【问题标题】:What is the best way to do ajax pagination with MongoDb and Nodejs?使用 MongoDb 和 Nodejs 进行 ajax 分页的最佳方法是什么?
【发布时间】:2018-02-15 18:07:39
【问题描述】:

我有 mongodb 和 NodeJs。连接是通过mongoosejs 完成的。
开发ajax无限滚动的最佳方法是什么?我应该使用限制和偏移吗?

【问题讨论】:

    标签: ajax node.js mongodb mongoose infinite-scroll


    【解决方案1】:

    当您对数据集进行分页时,“跳过和限制”方法效率不高。它实际上是一个Shlemiel the Painter's algorithm

    范围查询效率更高(当索引支持时)。例如,假设您正在显示推文。您的页面大小为 20,并且您在第 1000 页上并希望加载第 1001 页。

    这个查询

    db.tweets.find().sort({created_at: -1}).skip(1001*20).limit(20)
    

    效率低很多
    db.tweets.find({created_at: {$lt: last_displayed_date}}).
              sort({created_at: -1}).limit(20);
    

    (前提是您在created_at 上有索引)。

    你明白了:当你加载一个页面时,记下最后一条推文的时间戳,并用它来查询下一页。

    【讨论】:

    • 如果有不同用户同时创建的一些推文,但我需要显示它们怎么办?
    • 如果是这样,按created_at: -1, user_id: 1排序
    • 如果按其他日期排序将不起作用。例如: 1. 用户可以按日期过滤事件(仅按天没有小时) 2. 在不同的日期(created_at different)创建了 300 个事件,它们将在不同的日期发生(event_date)。 3.如何过滤它们并通过分页加载?注意:不可能按 event_date 排序,因为这个日期是四舍五入的,不是唯一的
    • 伙计,想点办法吧。我给了你基本的想法:)
    • 通过event_date, event_id订购。
    猜你喜欢
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 2017-12-01
    相关资源
    最近更新 更多