2014-07-11 49 views
1

在[14]:= OBJ coll.aggregate({ '$組':{ '_id': '$ L', 'N':{ '$總和': 1}} })

在[15]:類型(OBJ)出[15]:快譯通

誰能幫助我瞭解這裏發生了什麼?

回答

-1

這是覆蓋在它描述的是,爲了返回遊標,你需要在除了管道指定參數在.aggregate()方法driver documentation

cursor = coll.aggregate([{'$group': { '_id': '$l', 'n': {'$sum': 1} }}],cursor={}) 

注意,返回的對象這裏是CommandCursor而不是cursor

這是因爲諸如.limit().skip()等各種修飾符以及其他選項不適用於聚合結果的上下文中。因此$maxTimeMS對於這種類型的遊標不是有效的選項。

此外,它不會做你認爲它會甚至有效的地方。原因在於「遊標」執行僅在「聚合管道」執行完成之後進行計數,因此在這種情況下,只需獲取結果即可。

查看.currentOp().killOp()實現其他方式來控制長時間運行的聚合任務。

+0

其實我找到了答案。您可以將'maxTimeMS'作爲參數傳遞給聚合方法(就像遊標一樣),它將起作用。 – VaidAbhishek

1

是的,你可以使用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之前aggregate命令不支持遊標所以它必須作爲選項加入,以避免破壞現有的應用程序。