@@ -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 )
@@ -1145,9 +1149,16 @@ def _stat_aggregate(cls, vos, aggregate, page, allow_disk_use, return_type):
1145
1149
1146
1150
if allow_disk_use :
1147
1151
_LOGGER .debug (f"[_stat_aggregate] allow_disk_use: { allow_disk_use } " )
1148
- cursor = vos .aggregate (pipeline , allowDiskUse = True )
1152
+
1153
+ if hint :
1154
+ cursor = vos .aggregate (pipeline , hint = hint , allowDiskUse = True )
1155
+ else :
1156
+ cursor = vos .aggregate (pipeline , allowDiskUse = True )
1149
1157
else :
1150
- cursor = vos .aggregate (pipeline )
1158
+ if hint :
1159
+ cursor = vos .aggregate (pipeline , hint = hint )
1160
+ else :
1161
+ cursor = vos .aggregate (pipeline )
1151
1162
1152
1163
if return_type == "cursor" :
1153
1164
return cursor
@@ -1158,6 +1169,7 @@ def _stat_aggregate(cls, vos, aggregate, page, allow_disk_use, return_type):
1158
1169
@classmethod
1159
1170
def _stat_distinct (cls , vos , distinct , page ):
1160
1171
result = {}
1172
+
1161
1173
values = vos .distinct (distinct )
1162
1174
1163
1175
try :
@@ -1187,6 +1199,7 @@ def stat(
1187
1199
page = None ,
1188
1200
reference_filter = None ,
1189
1201
target = "SECONDARY_PREFERRED" ,
1202
+ hint = None ,
1190
1203
allow_disk_use = False ,
1191
1204
return_type = "dict" ,
1192
1205
** kwargs ,
@@ -1205,7 +1218,7 @@ def stat(
1205
1218
1206
1219
if aggregate :
1207
1220
return cls ._stat_aggregate (
1208
- vos , aggregate , page , allow_disk_use , return_type
1221
+ vos , aggregate , page , hint , allow_disk_use , return_type
1209
1222
)
1210
1223
1211
1224
elif distinct :
0 commit comments