@@ -69,12 +69,14 @@ def _get_replace_expr(self, sub_expr, group, alias):
6969        if  getattr (sub_expr , "distinct" , False ):
7070            # If the expression should return distinct values, use $addToSet to 
7171            # deduplicate. 
72-             rhs  =  sub_expr .as_mql (self , self .connection , resolve_inner_expression = True )
72+             rhs  =  sub_expr .as_mql (
73+                 self , self .connection , resolve_inner_expression = True , as_expr = True 
74+             )
7375            group [alias ] =  {"$addToSet" : rhs }
7476            replacing_expr  =  sub_expr .copy ()
7577            replacing_expr .set_source_expressions ([inner_column , None ])
7678        else :
77-             group [alias ] =  sub_expr .as_mql (self , self .connection )
79+             group [alias ] =  sub_expr .as_mql (self , self .connection ,  as_expr = True )
7880            replacing_expr  =  inner_column 
7981        # Count must return 0 rather than null. 
8082        if  isinstance (sub_expr , Count ):
@@ -302,9 +304,7 @@ def _compound_searches_queries(self, search_replacements):
302304                    search .as_mql (self , self .connection ),
303305                    {
304306                        "$addFields" : {
305-                             result_col .as_mql (self , self .connection , as_path = True ): {
306-                                 "$meta" : score_function 
307-                             }
307+                             result_col .as_mql (self , self .connection ): {"$meta" : score_function }
308308                        }
309309                    },
310310                ]
@@ -334,7 +334,7 @@ def pre_sql_setup(self, with_col_aliases=False):
334334                    pipeline .extend (query .get_pipeline ())
335335                # Remove the added subqueries. 
336336                self .subqueries  =  []
337-                 pipeline .append ({"$match" : { "$expr" :  having } })
337+                 pipeline .append ({"$match" : having })
338338            self .aggregation_pipeline  =  pipeline 
339339        self .annotations  =  {
340340            target : expr .replace_expressions (all_replacements )
@@ -481,11 +481,11 @@ def build_query(self, columns=None):
481481            query .lookup_pipeline  =  self .get_lookup_pipeline ()
482482            where  =  self .get_where ()
483483            try :
484-                 expr  =  where .as_mql (self , self .connection ) if  where  else  {}
484+                 match_mql  =  where .as_mql (self , self .connection ) if  where  else  {}
485485            except  FullResultSet :
486486                query .match_mql  =  {}
487487            else :
488-                 query .match_mql  =  { "$expr" :  expr } 
488+                 query .match_mql  =  match_mql 
489489        if  extra_fields :
490490            query .extra_fields  =  self .get_project_fields (extra_fields , force_expression = True )
491491        query .subqueries  =  self .subqueries 
@@ -643,7 +643,9 @@ def get_combinator_queries(self):
643643            for  alias , expr  in  self .columns :
644644                # Unfold foreign fields. 
645645                if  isinstance (expr , Col ) and  expr .alias  !=  self .collection_name :
646-                     ids [expr .alias ][expr .target .column ] =  expr .as_mql (self , self .connection )
646+                     ids [expr .alias ][expr .target .column ] =  expr .as_mql (
647+                         self , self .connection , as_expr = True 
648+                     )
647649                else :
648650                    ids [alias ] =  f"${ alias }  
649651            # Convert defaultdict to dict so it doesn't appear as 
@@ -707,16 +709,16 @@ def get_project_fields(self, columns=None, ordering=None, force_expression=False
707709                    # For brevity/simplicity, project {"field_name": 1} 
708710                    # instead of {"field_name": "$field_name"}. 
709711                    if  isinstance (expr , Col ) and  name  ==  expr .target .column  and  not  force_expression 
710-                     else  expr .as_mql (self , self .connection )
712+                     else  expr .as_mql (self , self .connection ,  as_expr = True )
711713                )
712714            except  EmptyResultSet :
713715                empty_result_set_value  =  getattr (expr , "empty_result_set_value" , NotImplemented )
714716                value  =  (
715717                    False  if  empty_result_set_value  is  NotImplemented  else  empty_result_set_value 
716718                )
717-                 fields [collection ][name ] =  Value (value ).as_mql (self , self .connection )
719+                 fields [collection ][name ] =  Value (value ).as_mql (self , self .connection ,  as_expr = True )
718720            except  FullResultSet :
719-                 fields [collection ][name ] =  Value (True ).as_mql (self , self .connection )
721+                 fields [collection ][name ] =  Value (True ).as_mql (self , self .connection ,  as_expr = True )
720722        # Annotations (stored in None) and the main collection's fields 
721723        # should appear in the top-level of the fields dict. 
722724        fields .update (fields .pop (None , {}))
@@ -739,10 +741,10 @@ def _get_ordering(self):
739741        idx  =  itertools .count (start = 1 )
740742        for  order  in  self .order_by_objs  or  []:
741743            if  isinstance (order .expression , Col ):
742-                 field_name  =  order .as_mql (self , self .connection ).removeprefix ("$" )
744+                 field_name  =  order .as_mql (self , self .connection ,  as_expr = True ).removeprefix ("$" )
743745                fields .append ((order .expression .target .column , order .expression ))
744746            elif  isinstance (order .expression , Ref ):
745-                 field_name  =  order .as_mql (self , self .connection ).removeprefix ("$" )
747+                 field_name  =  order .as_mql (self , self .connection ,  as_expr = True ).removeprefix ("$" )
746748            else :
747749                field_name  =  f"__order{ next (idx )}  
748750                fields .append ((field_name , order .expression ))
@@ -879,7 +881,7 @@ def execute_sql(self, result_type):
879881                    )
880882            prepared  =  field .get_db_prep_save (value , connection = self .connection )
881883            if  hasattr (value , "as_mql" ):
882-                 prepared  =  prepared .as_mql (self , self .connection )
884+                 prepared  =  prepared .as_mql (self , self .connection ,  as_expr = True )
883885            values [field .column ] =  prepared 
884886        try :
885887            criteria  =  self .build_query ().match_mql 
0 commit comments