@@ -200,6 +200,7 @@ def get_nested_fields(model: Type[BaseModel]):
200
200
201
201
202
202
def create_nested_pipeline (model : Type [BaseModel ], prefix = "" ):
203
+ logger .debug (f"Creating nested pipeline for model: { model .__name__ } , prefix: { prefix } " )
203
204
nested_fields = get_nested_fields (model )
204
205
pipeline = {}
205
206
match_conditions = {}
@@ -218,10 +219,16 @@ def create_nested_pipeline(model: Type[BaseModel], prefix=""):
218
219
if field_name in nested_fields :
219
220
if get_origin (field_type .type_ ) is List :
220
221
nested_pipeline , nested_match = create_nested_pipeline (
221
- nested_fields [field_name ], "$$item."
222
+ nested_fields [field_name ], "" # Empty prefix for list items
222
223
)
223
224
pipeline [field_name ] = {
224
- "$map" : {"input" : f"${ full_field_name } " , "as" : "item" , "in" : nested_pipeline }
225
+ "$map" : {
226
+ "input" : f"${ full_field_name } " ,
227
+ "as" : "item" ,
228
+ "in" : {
229
+ k : f"$item.{ v .replace ('$' , '' )} " for k , v in nested_pipeline .items ()
230
+ },
231
+ }
225
232
}
226
233
match_conditions [full_field_name ] = {"$exists" : True , "$ne" : []}
227
234
else :
@@ -236,6 +243,10 @@ def create_nested_pipeline(model: Type[BaseModel], prefix=""):
236
243
pipeline [field_name ] = f"${ full_field_name } "
237
244
match_conditions [full_field_name ] = {"$exists" : True }
238
245
246
+ logger .debug (f"Field: { field_name } , Full field name: { full_field_name } " )
247
+ logger .debug (f"Resulting pipeline part: { pipeline [field_name ]} " )
248
+
249
+ logger .debug (f"Final pipeline for { model .__name__ } : { pipeline } " )
239
250
return pipeline , match_conditions
240
251
241
252
0 commit comments