@@ -81,6 +81,8 @@ def get_source_expressions(self):
8181
8282 @staticmethod
8383 def cast_as_value (value ):
84+ if value is None :
85+ return None
8486 return Value (value ) if not hasattr (value , "resolve_expression" ) else value
8587
8688 @staticmethod
@@ -131,14 +133,14 @@ def get_search_fields(self, compiler, connection):
131133 def search_operator (self , compiler , connection ):
132134 params = {
133135 "path" : self .path .as_mql (compiler , connection , as_path = True ),
134- "query" : self .query .as_mql ( compiler , connection ) ,
136+ "query" : self .query .value ,
135137 }
136138 if self .score is not None :
137139 params ["score" ] = self .score .as_mql (compiler , connection )
138140 if self .fuzzy is not None :
139- params ["fuzzy" ] = self .fuzzy .as_mql ( compiler , connection )
141+ params ["fuzzy" ] = self .fuzzy .value
140142 if self .token_order is not None :
141- params ["tokenOrder" ] = self .token_order .as_mql ( compiler , connection )
143+ params ["tokenOrder" ] = self .token_order .value
142144 return {"autocomplete" : params }
143145
144146
@@ -161,7 +163,7 @@ def set_source_expressions(self, exprs):
161163 def search_operator (self , compiler , connection ):
162164 params = {
163165 "path" : self .path .as_mql (compiler , connection , as_path = True ),
164- "value" : self .value .as_mql ( compiler , connection ) ,
166+ "value" : self .value .value ,
165167 }
166168 if self .score is not None :
167169 params ["score" ] = self .score .as_mql (compiler , connection )
@@ -211,10 +213,10 @@ def set_source_expressions(self, exprs):
211213 def search_operator (self , compiler , connection ):
212214 params = {
213215 "path" : self .path .as_mql (compiler , connection , as_path = True ),
214- "value" : self .value .as_mql ( compiler , connection ) ,
216+ "value" : self .value .value ,
215217 }
216218 if self .score is not None :
217- params ["score" ] = self .score .definitions
219+ params ["score" ] = self .score .as_mql ( compiler , connection )
218220 return {"in" : params }
219221
220222
@@ -239,14 +241,14 @@ def set_source_expressions(self, exprs):
239241 def search_operator (self , compiler , connection ):
240242 params = {
241243 "path" : self .path .as_mql (compiler , connection , as_path = True ),
242- "query" : self .query .as_mql ( compiler , connection ) ,
244+ "query" : self .query .value ,
243245 }
244246 if self .score is not None :
245247 params ["score" ] = self .score .as_mql (compiler , connection )
246248 if self .slop is not None :
247- params ["slop" ] = self .slop .as_mql ( compiler , connection )
249+ params ["slop" ] = self .slop .value
248250 if self .synonyms is not None :
249- params ["synonyms" ] = self .synonyms .as_mql ( compiler , connection )
251+ params ["synonyms" ] = self .synonyms .value
250252 return {"phrase" : params }
251253
252254
@@ -269,10 +271,10 @@ def set_source_expressions(self, exprs):
269271 def search_operator (self , compiler , connection ):
270272 params = {
271273 "defaultPath" : self .path .as_mql (compiler , connection , as_path = True ),
272- "query" : self .query .as_mql ( compiler , connection ) ,
274+ "query" : self .query .value ,
273275 }
274276 if self .score is not None :
275- params ["score" ] = self .score .definitions
277+ params ["score" ] = self .score .as_mql ( compiler , connection )
276278 return {"queryString" : params }
277279
278280
@@ -300,15 +302,15 @@ def search_operator(self, compiler, connection):
300302 "path" : self .path .as_mql (compiler , connection , as_path = True ),
301303 }
302304 if self .score is not None :
303- params ["score" ] = self .score .definitions
305+ params ["score" ] = self .score .as_mql ( compiler , connection )
304306 if self .lt is not None :
305- params ["lt" ] = self .lt .as_mql ( compiler , connection )
307+ params ["lt" ] = self .lt .value
306308 if self .lte is not None :
307- params ["lte" ] = self .lte .as_mql ( compiler , connection )
309+ params ["lte" ] = self .lte .value
308310 if self .gt is not None :
309- params ["gt" ] = self .gt .as_mql ( compiler , connection )
311+ params ["gt" ] = self .gt .value
310312 if self .gte is not None :
311- params ["gte" ] = self .gte .as_mql ( compiler , connection )
313+ params ["gte" ] = self .gte .value
312314 return {"range" : params }
313315
314316
@@ -332,12 +334,12 @@ def set_source_expressions(self, exprs):
332334 def search_operator (self , compiler , connection ):
333335 params = {
334336 "path" : self .path .as_mql (compiler , connection , as_path = True ),
335- "query" : self .query .as_mql ( compiler , connection , as_path = True ) ,
337+ "query" : self .query .value ,
336338 }
337339 if self .score :
338- params ["score" ] = self .score .definitions
340+ params ["score" ] = self .score .as_mql ( compiler , connection )
339341 if self .allow_analyzed_field is not None :
340- params ["allowAnalyzedField" ] = self .allow_analyzed_field
342+ params ["allowAnalyzedField" ] = self .allow_analyzed_field . value
341343 return {"regex" : params }
342344
343345
@@ -363,16 +365,16 @@ def set_source_expressions(self, exprs):
363365 def search_operator (self , compiler , connection ):
364366 params = {
365367 "path" : self .path .as_mql (compiler , connection , as_path = True ),
366- "query" : self .query .as_mql ( compiler , connection , as_path = True ) ,
368+ "query" : self .query .value ,
367369 }
368370 if self .score :
369- params ["score" ] = self .score .definitions
371+ params ["score" ] = self .score .as_mql ( compiler , connection )
370372 if self .fuzzy is not None :
371- params ["fuzzy" ] = self .fuzzy
373+ params ["fuzzy" ] = self .fuzzy . value
372374 if self .match_criteria is not None :
373- params ["matchCriteria" ] = self .match_criteria
375+ params ["matchCriteria" ] = self .match_criteria . value
374376 if self .synonyms is not None :
375- params ["synonyms" ] = self .synonyms
377+ params ["synonyms" ] = self .synonyms . value
376378 return {"text" : params }
377379
378380
@@ -396,12 +398,12 @@ def set_source_expressions(self, exprs):
396398 def search_operator (self , compiler , connection ):
397399 params = {
398400 "path" : self .path .as_mql (compiler , connection , as_path = True ),
399- "query" : self .query .as_mql ( compiler , connection , as_path = True ) ,
401+ "query" : self .query .value ,
400402 }
401403 if self .score :
402- params ["score" ] = self .score .definitions
404+ params ["score" ] = self .score .query . as_mql ( compiler , connection )
403405 if self .allow_analyzed_field is not None :
404- params ["allowAnalyzedField" ] = self .allow_analyzed_field
406+ params ["allowAnalyzedField" ] = self .allow_analyzed_field . value
405407 return {"wildcard" : params }
406408
407409
@@ -425,11 +427,11 @@ def set_source_expressions(self, exprs):
425427 def search_operator (self , compiler , connection ):
426428 params = {
427429 "path" : self .path .as_mql (compiler , connection , as_path = True ),
428- "relation" : self .relation ,
429- "geometry" : self .geometry ,
430+ "relation" : self .relation . value ,
431+ "geometry" : self .geometry . value ,
430432 }
431433 if self .score :
432- params ["score" ] = self .score .definitions
434+ params ["score" ] = self .score .as_mql ( compiler , connection )
433435 return {"geoShape" : params }
434436
435437
@@ -453,10 +455,10 @@ def set_source_expressions(self, exprs):
453455 def search_operator (self , compiler , connection ):
454456 params = {
455457 "path" : self .path .as_mql (compiler , connection , as_path = True ),
456- self .kind : self .geo_object ,
458+ self .kind . value : self .geo_object . value ,
457459 }
458460 if self .score :
459- params ["score" ] = self .score .definitions
461+ params ["score" ] = self .score .as_mql ( compiler , connection )
460462 return {"geoWithin" : params }
461463
462464
@@ -474,10 +476,10 @@ def set_source_expressions(self, exprs):
474476
475477 def search_operator (self , compiler , connection ):
476478 params = {
477- "like" : self .documents ,
479+ "like" : self .documents . as_mql ( compiler , connection ) ,
478480 }
479481 if self .score :
480- params ["score" ] = self .score .definitions
482+ params ["score" ] = self .score .as_mql ( compiler , connection )
481483 return {"moreLikeThis" : params }
482484
483485 def get_search_fields (self , compiler , connection ):
@@ -507,7 +509,7 @@ def __init__(
507509 def get_search_fields (self , compiler , connection ):
508510 fields = set ()
509511 for clause in self .must + self .should + self .filter + self .must_not :
510- fields .update (clause .get_search_fields ())
512+ fields .update (clause .get_search_fields (compiler , connection ))
511513 return fields
512514
513515 def resolve_expression (
@@ -532,13 +534,19 @@ def resolve_expression(
532534 def search_operator (self , compiler , connection ):
533535 params = {}
534536 if self .must :
535- params ["must" ] = [clause .search_operator () for clause in self .must ]
537+ params ["must" ] = [clause .search_operator (compiler , connection ) for clause in self .must ]
536538 if self .must_not :
537- params ["mustNot" ] = [clause .search_operator () for clause in self .must_not ]
539+ params ["mustNot" ] = [
540+ clause .search_operator (compiler , connection ) for clause in self .must_not
541+ ]
538542 if self .should :
539- params ["should" ] = [clause .search_operator () for clause in self .should ]
543+ params ["should" ] = [
544+ clause .search_operator (compiler , connection ) for clause in self .should
545+ ]
540546 if self .filter :
541- params ["filter" ] = [clause .search_operator () for clause in self .filter ]
547+ params ["filter" ] = [
548+ clause .search_operator (compiler , connection ) for clause in self .filter
549+ ]
542550 if self .minimum_should_match is not None :
543551 params ["minimumShouldMatch" ] = self .minimum_should_match
544552 return {"compound" : params }
@@ -650,15 +658,15 @@ def _get_query_index(self, fields, compiler):
650658
651659 def as_mql (self , compiler , connection ):
652660 params = {
653- "index" : self ._get_query_index (self .get_search_fields (), compiler ),
661+ "index" : self ._get_query_index (self .get_search_fields (compiler , connection ), compiler ),
654662 "path" : self .path .as_mql (compiler , connection , as_path = True ),
655- "queryVector" : self .query_vector .as_mql ( compiler , connection ) ,
656- "limit" : self .limit .as_mql ( compiler , connection ) ,
663+ "queryVector" : self .query_vector .value ,
664+ "limit" : self .limit .value ,
657665 }
658666 if self .num_candidates is not None :
659- params ["numCandidates" ] = self .num_candidates .as_mql ( compiler , connection )
667+ params ["numCandidates" ] = self .num_candidates .value
660668 if self .exact is not None :
661- params ["exact" ] = self .exact .as_mql ( compiler , connection )
669+ params ["exact" ] = self .exact .value
662670 if self .filter is not None :
663671 params ["filter" ] = self .filter .as_mql (compiler , connection )
664672 return {"$vectorSearch" : params }
0 commit comments