mongodb - 检查游标是否超时

标签 mongodb pymongo pymongo-3.x

是否可以检查数据库中打开的游标是否已超时? .alive 属性似乎在没有实际调用 next() 的情况下不会更新,但这也会导致光标位置前进,这是我不希望的。

背景:我将数据延迟加载到 Web 客户端,并在服务器端保持游标打开,以便客户端可以从中请求更多数据。我让 Mongo 的游标超时,因为这对于用例来说已经足够好了,并且简化了有保证的游标垃圾收集。但是,这让我不得不管理打开的游标引用 Python 端,这是我在偶尔的垃圾收集周期中所做的。在这个周期中,我想丢弃所有在 Mongo 端已经超时的游标。

最佳答案

根据changelog.rst对于 PyMongo 驱动程序,alive 方法在 MongoClient 上已弃用,因为它不再提供有意义的信息。即使Mongo Client掉线了,它也可以及时发现一个服务器来完成下一个操作。 alive 在游标级别仍然可用,但是,它只为可尾游标提供有意义的信息,因为它们可能会暂时停止迭代。对于普通游标,验证游标是否仍然存在的唯一可靠方法是调用 next()

如果调用 next() 时出现问题,您可以使用类似于下面的片段将光标倒回并重播到最后一条记录:

recordCount = 10
cursor.rewind()
counter = 0
for _ in cursor:
    counter = counter + 1
    if counter == recordCount:
        break

关于mongodb - 检查游标是否超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34315835/

相关文章:

mongodb - 如何在 sails.js 启动时运行命令

mongodb:UnknownError 断言 src/mongo/db/server_options_helpers.cpp:355

MongoDB Capped Collection 最大允许大小

Python Mongodb 通过批量大小限制超时

python - InvalidBSON 消耗游标并引发 StopIteration。如何跳过坏文档?

python - 如何在pymongo连接中的密码中转义@?

python - 如何在不迭代的情况下计算pymongo聚合游标

node.js - MongoDB 不报告关闭连接

python - 在heroku上使用带有django的站点地图包

python - 如何使用pymongo命令updateUser