如何在没有迭代的情况下计算pymongo聚合游标

jad*_*ra7 10 python mongodb pymongo-3.x

我想在pymongo 3.0+版本中获得聚合光标中的记录总数.有没有办法在不迭代光标的情况下获得总计数?

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

有没有办法跳过上面的迭代?

chr*_*dam 5

您可以添加另一个组管道,您可以在其中指定一个_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))
Run Code Online (Sandbox Code Playgroud)