@@ -1119,7 +1119,7 @@ def _make_aggregate_rules(cls, aggregate):
11191119 return _aggregate_rules
11201120
11211121 @classmethod
1122- def _stat_aggregate (cls , vos , aggregate , page , allow_disk_use ):
1122+ def _stat_aggregate (cls , vos , aggregate , page , allow_disk_use , return_type ):
11231123 result = {}
11241124 pipeline = []
11251125 _aggregate_rules = cls ._make_aggregate_rules (aggregate )
@@ -1148,8 +1148,12 @@ def _stat_aggregate(cls, vos, aggregate, page, allow_disk_use):
11481148 cursor = vos .aggregate (pipeline , allowDiskUse = True )
11491149 else :
11501150 cursor = vos .aggregate (pipeline )
1151- result ["results" ] = cls ._make_aggregate_values (cursor )
1152- return result
1151+
1152+ if return_type == "cursor" :
1153+ return cursor
1154+ else :
1155+ result ["results" ] = cls ._make_aggregate_values (cursor )
1156+ return result
11531157
11541158 @classmethod
11551159 def _stat_distinct (cls , vos , distinct , page ):
@@ -1184,6 +1188,7 @@ def stat(
11841188 reference_filter = None ,
11851189 target = "SECONDARY_PREFERRED" ,
11861190 allow_disk_use = False ,
1191+ return_type = "dict" ,
11871192 ** kwargs ,
11881193 ):
11891194 filter = filter or []
@@ -1199,7 +1204,9 @@ def stat(
11991204 vos = cls ._get_target_objects (target ).filter (_filter )
12001205
12011206 if aggregate :
1202- return cls ._stat_aggregate (vos , aggregate , page , allow_disk_use )
1207+ return cls ._stat_aggregate (
1208+ vos , aggregate , page , allow_disk_use , return_type
1209+ )
12031210
12041211 elif distinct :
12051212 return cls ._stat_distinct (vos , distinct , page )
@@ -1499,6 +1506,7 @@ def analyze(
14991506 reference_filter = None ,
15001507 target = "SECONDARY_PREFERRED" ,
15011508 allow_disk_use = False ,
1509+ return_type = "dict" ,
15021510 ** kwargs ,
15031511 ):
15041512 if fields is None :
@@ -1540,6 +1548,7 @@ def analyze(
15401548 "aggregate" : aggregate ,
15411549 "target" : target ,
15421550 "allow_disk_use" : allow_disk_use ,
1551+ "return_type" : return_type ,
15431552 "reference_filter" : reference_filter ,
15441553 }
15451554
@@ -1561,8 +1570,11 @@ def analyze(
15611570
15621571 response = cls .stat (** query )
15631572
1564- if page_limit :
1565- response ["more" ] = len (response ["results" ]) > page_limit
1566- response ["results" ] = response ["results" ][:page_limit ]
1573+ if return_type == "cursor" :
1574+ return response
1575+ else :
1576+ if page_limit :
1577+ response ["more" ] = len (response ["results" ]) > page_limit
1578+ response ["results" ] = response ["results" ][:page_limit ]
15671579
1568- return response
1580+ return response
0 commit comments