Skip to content

Commit bfb40b7

Browse files
committed
Encapsulates subquery to avoid returning a empty set when a list is required.
1 parent 2a475b5 commit bfb40b7

File tree

1 file changed

+26
-4
lines changed

1 file changed

+26
-4
lines changed

django_mongodb/expressions.py

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -118,12 +118,34 @@ def query(self, compiler, connection, lookup_name=None):
118118
if lookup_name in ("in", "range"):
119119
subquery.aggregation_pipeline = [
120120
{
121-
"$group": {
122-
"_id": None,
123-
"dummy_name": {"$addToSet": expr.as_mql(subquery_compiler, connection)},
121+
"$facet": {
122+
"group": [
123+
{
124+
"$group": {
125+
"_id": None,
126+
"tmp_name": {
127+
"$addToSet": expr.as_mql(subquery_compiler, connection)
128+
},
129+
}
130+
}
131+
]
132+
}
133+
},
134+
{
135+
"$project": {
136+
field_name: {
137+
"$ifNull": [
138+
{
139+
"$getField": {
140+
"input": {"$arrayElemAt": ["$group", 0]},
141+
"field": "tmp_name",
142+
}
143+
},
144+
[],
145+
]
146+
}
124147
}
125148
},
126-
{"$project": {field_name: "$dummy_name"}},
127149
]
128150
compiler.subqueries.append(subquery)
129151
return f"${table_output}.{field_name}"

0 commit comments

Comments
 (0)