Skip to content

Commit b4a7633

Browse files
committed
Fix aggregate pre-pipeline overwrited.
1 parent ef4e6fd commit b4a7633

File tree

1 file changed

+33
-27
lines changed

1 file changed

+33
-27
lines changed

django_mongodb/expressions.py

Lines changed: 33 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -119,37 +119,43 @@ def query(self, compiler, connection, lookup_name=None):
119119
}
120120
# The result must be a list of values. The output is compressed with an aggregation pipeline.
121121
if lookup_name in ("in", "range"):
122-
subquery.aggregation_pipeline = [
123-
{
124-
"$facet": {
125-
"group": [
126-
{
127-
"$group": {
128-
"_id": None,
129-
"tmp_name": {
130-
"$addToSet": expr.as_mql(subquery_compiler, connection)
131-
},
132-
}
133-
}
134-
]
135-
}
136-
},
137-
{
138-
"$project": {
139-
field_name: {
140-
"$ifNull": [
122+
if subquery.aggregation_pipeline is None:
123+
subquery.aggregation_pipeline = []
124+
subquery.aggregation_pipeline.extend(
125+
[
126+
{
127+
"$facet": {
128+
"group": [
141129
{
142-
"$getField": {
143-
"input": {"$arrayElemAt": ["$group", 0]},
144-
"field": "tmp_name",
130+
"$group": {
131+
"_id": None,
132+
"tmp_name": {
133+
"$addToSet": expr.as_mql(subquery_compiler, connection)
134+
},
145135
}
146-
},
147-
[],
136+
}
148137
]
149138
}
150-
}
151-
},
152-
]
139+
},
140+
{
141+
"$project": {
142+
field_name: {
143+
"$ifNull": [
144+
{
145+
"$getField": {
146+
"input": {"$arrayElemAt": ["$group", 0]},
147+
"field": "tmp_name",
148+
}
149+
},
150+
[],
151+
]
152+
}
153+
}
154+
},
155+
]
156+
)
157+
# Erase all the projection given that we already project the required value.
158+
subquery.project_fields = None
153159
compiler.subqueries.append(subquery)
154160
return f"${table_output}.{field_name}"
155161

0 commit comments

Comments
 (0)