@@ -679,6 +679,7 @@ def query(
679
679
unwind = None ,
680
680
reference_filter = None ,
681
681
target = None ,
682
+ hint = None ,
682
683
** kwargs ,
683
684
):
684
685
filter = filter or []
@@ -706,6 +707,9 @@ def query(
706
707
try :
707
708
vos = cls ._get_target_objects (target ).filter (_filter )
708
709
710
+ if hint :
711
+ vos = vos .hint (hint )
712
+
709
713
if len (_order_by ) > 0 :
710
714
vos = vos .order_by (* _order_by )
711
715
@@ -1119,7 +1123,7 @@ def _make_aggregate_rules(cls, aggregate):
1119
1123
return _aggregate_rules
1120
1124
1121
1125
@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 ):
1123
1127
result = {}
1124
1128
pipeline = []
1125
1129
_aggregate_rules = cls ._make_aggregate_rules (aggregate )
@@ -1143,11 +1147,15 @@ def _stat_aggregate(cls, vos, aggregate, page, allow_disk_use, return_type):
1143
1147
1144
1148
pipeline .append ({"$limit" : limit })
1145
1149
1150
+ options = {}
1146
1151
if allow_disk_use :
1147
1152
_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 )
1151
1159
1152
1160
if return_type == "cursor" :
1153
1161
return cursor
@@ -1158,6 +1166,7 @@ def _stat_aggregate(cls, vos, aggregate, page, allow_disk_use, return_type):
1158
1166
@classmethod
1159
1167
def _stat_distinct (cls , vos , distinct , page ):
1160
1168
result = {}
1169
+
1161
1170
values = vos .distinct (distinct )
1162
1171
1163
1172
try :
@@ -1187,6 +1196,7 @@ def stat(
1187
1196
page = None ,
1188
1197
reference_filter = None ,
1189
1198
target = "SECONDARY_PREFERRED" ,
1199
+ hint = None ,
1190
1200
allow_disk_use = False ,
1191
1201
return_type = "dict" ,
1192
1202
** kwargs ,
@@ -1205,7 +1215,7 @@ def stat(
1205
1215
1206
1216
if aggregate :
1207
1217
return cls ._stat_aggregate (
1208
- vos , aggregate , page , allow_disk_use , return_type
1218
+ vos , aggregate , page , hint , allow_disk_use , return_type
1209
1219
)
1210
1220
1211
1221
elif distinct :
@@ -1505,6 +1515,7 @@ def analyze(
1505
1515
date_field_format = "%Y-%m-%d" ,
1506
1516
reference_filter = None ,
1507
1517
target = "SECONDARY_PREFERRED" ,
1518
+ hint = None ,
1508
1519
allow_disk_use = False ,
1509
1520
return_type = "dict" ,
1510
1521
** kwargs ,
@@ -1547,6 +1558,7 @@ def analyze(
1547
1558
"filter_or" : filter_or ,
1548
1559
"aggregate" : aggregate ,
1549
1560
"target" : target ,
1561
+ "hint" : hint ,
1550
1562
"allow_disk_use" : allow_disk_use ,
1551
1563
"return_type" : return_type ,
1552
1564
"reference_filter" : reference_filter ,
0 commit comments