Как подсчитать курсор агрегации pymongo без итерации

Я хочу получить общее количество записей в агрегированном курсоре в версии pymongo версии 3.0+. Есть ли способ получить общий счет без повторения курсора?

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

Есть ли способ пропустить вышеупомянутую итерацию?

Вы можете добавить другой групповой конвейер, в котором вы указываете значение _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))