Mongodb 检查光标是否超时

Mongodb 检查光标是否超时,mongodb,pymongo,pymongo-3.x,Mongodb,Pymongo,Pymongo 3.x,是否可以检查数据库上打开的游标是否已超时?如果不实际调用next(),则.alive属性似乎不会更新,但这也会导致光标位置提前,这是我不希望看到的 背景:我懒得将数据加载到web客户机,我保持光标在服务器端打开,以便客户机可以从中请求更多数据。我通过Mongo让游标超时,因为这对于用例来说已经足够好了,并且简化了保证的游标垃圾收集。然而,这让我不得不管理Python端的开放游标引用,这是我偶尔进行的垃圾收集循环。在这个周期中,我想扔掉Mongo端已经超时的所有游标。根据PyMongo驱动程序的说

是否可以检查数据库上打开的游标是否已超时?如果不实际调用
next()
,则
.alive
属性似乎不会更新,但这也会导致光标位置提前,这是我不希望看到的

背景:我懒得将数据加载到web客户机,我保持光标在服务器端打开,以便客户机可以从中请求更多数据。我通过Mongo让游标超时,因为这对于用例来说已经足够好了,并且简化了保证的游标垃圾收集。然而,这让我不得不管理Python端的开放游标引用,这是我偶尔进行的垃圾收集循环。在这个周期中,我想扔掉Mongo端已经超时的所有游标。

根据PyMongo驱动程序的说明,
alive
方法在
MongoClient
上被弃用,因为它不再提供有意义的信息。即使Mongo客户端断开连接,它也可能及时发现服务器以完成下一个操作<代码>活动在游标级别仍然可用,但是,它只为可裁剪游标提供有意义的信息,因为它们可能会暂时停止迭代。对于普通游标,验证游标是否仍处于活动状态的唯一可靠方法是调用
next()

如果调用
next()
有问题,您可以使用类似于下面的代码段倒带光标并将其重放到最后一条记录:

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

嗯,真令人失望也没有允许我查询游标状态的服务器API?没有。验证游标是否仍处于活动状态的唯一可靠方法是对数据库运行查询。如果调用next()会产生问题,您可以使用rewind()将光标恢复到其原始位置。我认为可以调用
next
,然后rewind,然后
skip
到我以前所在的位置,这是否正确?那么这确实可以解决问题。在我的例子中,我还需要对
CommandCursor
s做同样的操作,它不支持倒带,所以这毕竟不是一个真正的选项。我得自己记录下上次使用的时间,并以这种方式清理它们。感谢您确认可用选项!