Skip to content

Commit 758a1c9

Browse files
author
Jongmin Kim
authored
Merge pull request #154 from whdalsrnt/master
Apply hint option to query of MongoDB model
2 parents 8d137e0 + 7993796 commit 758a1c9

File tree

1 file changed

+17
-5
lines changed

1 file changed

+17
-5
lines changed

src/spaceone/core/model/mongo_model/__init__.py

+17-5
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)