【问题标题】:Saving MongoDB cursor between HTTP requests in Flask在 Flask 中的 HTTP 请求之间保存 MongoDB 游标
【发布时间】:2015-08-07 11:17:35
【问题描述】:

我正在编写一个 web 应用程序,以使用 pymongo(常规 pymongo)和烧瓶显示来自 MongoDB 数据库的推文。

我遇到的问题是,当访问分页结果时,搜索会一次又一次地执行,而我真正需要做的就是遍历光标。

Page 1: db.tweets.find({...})[0:20]
Page 2: db.tweets.find({...})[21:30]
Page 3: db.tweets.find({...})[31:40]

每次更改页面时都会调用 db.tweets.find({...}) 调用,理想情况下我想做一次 db.tweets.find({...}) 并将其存储到变量称为游标,然后切片:

cursor = db.tweets.find({...})
Page 1: cursor[0:20]
Page 2: cursor[21:30], etc...

我考虑过使用会话,但游标不是 json 可序列化的,我无法将所有内容存储在内存中。我想知道是否有人知道如何在 http 请求之间存储/保留光标,这样我就不必每次都继续计算它,或者可能是另一种分页方法?

我确实计划让这个 web 应用程序拥有多个并发用户,因此在全球范围内存储它可能不是一个好主意。

【问题讨论】:

    标签: mongodb python-2.7 flask pymongo


    【解决方案1】:

    您可以对结果进行排序并随时跳过

    我的小伙伴:

    db.tweets.find().sort(("name", pymongo.ASCENDING)).limit(20).skip(20)
    
                                     or
    #For Twenty pages to get twenty different tweets for each page
    n=20
    for i in range 10:
        db.tweets.find().sort(("name", pymongo.ASCENDING)).limit(20).skip((n*i))
    

    【讨论】:

    • 我做了一些进一步的研究,发现 skip & limit 不适用于大型数据集 (blog.mongodirector.com/fast-paging-with-mongodb),而我的数据集有数百万。我想它确实适用于跳过页面,即转到第 1 页然后第 5 页然后第 7 页。然后是范围查询和限制,但这仅适用于顺序分页(第 1、2、3 页...)
    猜你喜欢
    • 2013-06-05
    • 2020-07-01
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    • 2013-05-11
    • 1970-01-01
    相关资源
    最近更新 更多