我无法在Mongo 2.6和Pymongo 2.7.1中使用maxTimeMS参数
根据此页面上的文档Official Mongodb Aggregation Page,聚合方法应返回Cursor
个对象。但是,当我在mongod
实例(2.6+)上使用pymongo
2.7.1本地运行查询时,我得到一个dict
对象!
在[14]中:obj = coll.aggregate({'$ group':{'_ id':'$ l','n':{'$ sum': 1}}})
在[15]中:type(obj)Out [15]:dict
有谁能帮我理解这里发生的事情?
答案 0 :(得分:2)
是的,您可以将maxTimeMS与pymongo聚合一起使用。
c.foo.bar.aggregate([], maxTimeMS=1000)
{u'ok': 1.0, u'result': []}
如果你想要一个光标:
for result in c.foo.bar.aggregate([], cursor={}, maxTimeMS=1000):
... print result
在MongoDB 2.6之前,聚合命令不支持游标,因此必须将其添加为选项以避免破坏现有应用程序。
答案 1 :(得分:-1)
在driver documentation中对此进行了介绍,其中描述了为了返回游标,您需要在.aggregate()
方法中指定除管道之外的参数:
cursor = coll.aggregate([{'$group': { '_id': '$l', 'n': {'$sum': 1} }}],cursor={})
请注意,此处返回的对象是CommandCursor而不是cursor。
这是因为各种修饰符(如.limit()
和.skip()
)和其他选项不适用于聚合结果的上下文。因此$maxTimeMS
不是此类游标的有效选项。
此外,即使有效,它也不会做你认为的那样。原因是“游标”执行仅在“聚合管道”执行完成后计算,所以在这种情况下,只需获取结果。
查看.currentOp()
和.killOp()
实现,了解控制长时间运行的聚合任务的其他方法。