2015-11-26 67 views
7

我想獲得pymongo 3.0+版中聚合遊標中的記錄總數。有什麼辦法可以在沒有迭代遊標的情況下獲得總數?如何計算pymongo聚合遊標而不重複

cursor = db.collection.aggregate([{"$match": options},{"$group": {"_id": groupby,"count": {"$sum":1}}} ]) 
cursorlist = [c for c in cursor] 
print len(cursorlist) 

有什麼辦法可以跳過上面的迭代嗎?

+1

在上面的代碼中,len(list(cursor))會給你返回的記錄數。因此不需要第二條線。 –

+0

謝謝@Sarath這將是有用的,如果我不想更新我的聚合查詢。 – jadhavmahendra7

回答

4

您可以添加另一個組管道,您可以在其中指定一個_idNone來計算所有輸入文檔的累計值,這是您可以獲得總計數以及原始分組計數的位置,儘管在累積陣列中:

>>> pipeline = [ 
...  {"$match": options}, 
...  {"$group": {"_id": groupby, "count": {"$sum":1}}}, 
...  {"$group": {"_id": None, "total": {"$sum": 1}, "details":{"$push":{"groupby": "$_id", "count": "$count"}}}} 
... ] 
>>> list(db.collection.aggregate(pipeline)) 
+0

這工作。只有微小的變化,Python必須使用None而不爲null謝謝! – jadhavmahendra7

+0

@ jadhavmahendra7很好!我已經更新了我的回答,以反映這一點,歡呼:) – chridam