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

Python 如何在不迭代的情况下计算pymongo聚合游标,python,mongodb,pymongo-3.x,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) 有没有办法跳过上述迭代?您可以添加另一个组管道,在其中指定\u i

我想获取pymongo 3.0+版本中聚合游标中的记录总数。是否有任何方法可以在不迭代光标的情况下获取总计数

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

有没有办法跳过上述迭代?

您可以添加另一个组管道,在其中指定
\u id
None
来计算所有输入文档作为一个整体的累积值,在这里您可以获得总计数以及原始分组计数,尽管是在累积数组中:

>>> 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))

在上面的代码中,len(list(cursor))将给出返回的记录数。因此不需要第二行。谢谢@Sarath。如果我不想更新我的聚合查询,这将非常有用。这很有效。只是小改动,Python必须使用None和NOTNULL谢谢@jadhavmahendra7接球不错!我更新了我的答案以反映这一点,干杯:)