@@ -679,6 +679,7 @@ def query(
679679 unwind = None ,
680680 reference_filter = None ,
681681 target = None ,
682+ hint = None ,
682683 ** kwargs ,
683684 ):
684685 filter = filter or []
@@ -706,6 +707,9 @@ def query(
706707 try :
707708 vos = cls ._get_target_objects (target ).filter (_filter )
708709
710+ if hint :
711+ vos = vos .hint (hint )
712+
709713 if len (_order_by ) > 0 :
710714 vos = vos .order_by (* _order_by )
711715
@@ -1119,7 +1123,7 @@ def _make_aggregate_rules(cls, aggregate):
11191123 return _aggregate_rules
11201124
11211125 @classmethod
1122- def _stat_aggregate (cls , vos , aggregate , page , allow_disk_use , return_type ):
1126+ def _stat_aggregate (cls , vos , aggregate , page , hint , allow_disk_use , return_type ):
11231127 result = {}
11241128 pipeline = []
11251129 _aggregate_rules = cls ._make_aggregate_rules (aggregate )
@@ -1143,11 +1147,15 @@ def _stat_aggregate(cls, vos, aggregate, page, allow_disk_use, return_type):
11431147
11441148 pipeline .append ({"$limit" : limit })
11451149
1150+ options = {}
11461151 if allow_disk_use :
11471152 _LOGGER .debug (f"[_stat_aggregate] allow_disk_use: { allow_disk_use } " )
1148- cursor = vos .aggregate (pipeline , allowDiskUse = True )
1149- else :
1150- cursor = vos .aggregate (pipeline )
1153+ options ["allowDiskUse" ] = True
1154+
1155+ if hint :
1156+ options ["hint" ] = hint
1157+
1158+ cursor = vos .aggregate (pipeline , ** options )
11511159
11521160 if return_type == "cursor" :
11531161 return cursor
@@ -1158,6 +1166,7 @@ def _stat_aggregate(cls, vos, aggregate, page, allow_disk_use, return_type):
11581166 @classmethod
11591167 def _stat_distinct (cls , vos , distinct , page ):
11601168 result = {}
1169+
11611170 values = vos .distinct (distinct )
11621171
11631172 try :
@@ -1187,6 +1196,7 @@ def stat(
11871196 page = None ,
11881197 reference_filter = None ,
11891198 target = "SECONDARY_PREFERRED" ,
1199+ hint = None ,
11901200 allow_disk_use = False ,
11911201 return_type = "dict" ,
11921202 ** kwargs ,
@@ -1205,7 +1215,7 @@ def stat(
12051215
12061216 if aggregate :
12071217 return cls ._stat_aggregate (
1208- vos , aggregate , page , allow_disk_use , return_type
1218+ vos , aggregate , page , hint , allow_disk_use , return_type
12091219 )
12101220
12111221 elif distinct :
@@ -1505,6 +1515,7 @@ def analyze(
15051515 date_field_format = "%Y-%m-%d" ,
15061516 reference_filter = None ,
15071517 target = "SECONDARY_PREFERRED" ,
1518+ hint = None ,
15081519 allow_disk_use = False ,
15091520 return_type = "dict" ,
15101521 ** kwargs ,
@@ -1547,6 +1558,7 @@ def analyze(
15471558 "filter_or" : filter_or ,
15481559 "aggregate" : aggregate ,
15491560 "target" : target ,
1561+ "hint" : hint ,
15501562 "allow_disk_use" : allow_disk_use ,
15511563 "return_type" : return_type ,
15521564 "reference_filter" : reference_filter ,
0 commit comments