是否可以在Pymongo中创建一个没有游标超时的聚合?


问题内容

聚合看起来像:

res = Things.objects._collection.aggregate(pipeline,
            allowDiskUse=True,
            batchSize=101,
            noCursorTimeout=True
        )

并失败了

OperationFailure:无法识别的字段“ noCursorTimeout”

从Pymongo文档中可以看出,no_cursor_timeout可以与find()一起使用,但是我没有成功为aggregate()找到可比较的**
kwargs。

我不想使用setParameter或maxTimeMS。

更新:

从MongoDB的Jira站点:SERVER-15042

OP_QUERY标头中的NoCursorTimeout位可防止服务器关闭闲置超过10分钟的游标。如果客户可能花费超过10分钟来处理一批结果,则可以设置此位。

“ aggregate”和“ parallelCollectionScan”命令也应允许客户端关闭光标超时。

对此票的答复是:

我们有意不支持noCursorTimeout。当我们实现游标keepalive时,需要此功能的原理将消失。这项工作将在SERVER-6036中进行跟踪。

SERVER-6036

  • 更新时间:2016年9月14日下午3:53:05 GMT + 0000
  • 状态:OPEN
  • 解决方法:未解决
  • 修复版本:已计划但未计划

如果我正确地阅读了文档,则aggregate()的cursor no timeout选项尚不存在。


问题答案:

没错,不能在单个聚合游标上禁用游标超时。但是我们提供了一个全局配置设置,cursorTimeoutMillis您可以将其增加很多:

mongod --setParameter cursorTimeoutMillis=600000  # 10 minutes

有关MongoDB版本信息,以及如何在运行时设置此参数,请参阅SERVER-8188