@@ -42,7 +42,7 @@ public AutocompleteSearchDefinition(
42
42
_fuzzy = fuzzy ;
43
43
}
44
44
45
- private protected override BsonDocument RenderArguments ( IBsonSerializer < TDocument > documentSerializer , IBsonSerializerRegistry serializerRegistry ) =>
45
+ private protected override BsonDocument RenderArguments ( SearchDefinitionRenderContext < TDocument > renderContext ) =>
46
46
new ( )
47
47
{
48
48
{ "query" , _query . Render ( ) } ,
@@ -76,7 +76,7 @@ public CompoundSearchDefinition(
76
76
_minimumShouldMatch = minimumShouldMatch ;
77
77
}
78
78
79
- private protected override BsonDocument RenderArguments ( IBsonSerializer < TDocument > documentSerializer , IBsonSerializerRegistry serializerRegistry )
79
+ private protected override BsonDocument RenderArguments ( SearchDefinitionRenderContext < TDocument > renderContext )
80
80
{
81
81
return new ( )
82
82
{
@@ -88,7 +88,33 @@ private protected override BsonDocument RenderArguments(IBsonSerializer<TDocumen
88
88
} ;
89
89
90
90
Func < BsonArray > Render ( List < SearchDefinition < TDocument > > searchDefinitions ) =>
91
- ( ) => new BsonArray ( searchDefinitions . Select ( clause => clause . Render ( documentSerializer , serializerRegistry ) ) ) ;
91
+ ( ) => new BsonArray ( searchDefinitions . Select ( clause => clause . Render ( renderContext ) ) ) ;
92
+ }
93
+ }
94
+
95
+ internal sealed class EmbeddedDocumentSearchDefinition < TDocument , TField > : OperatorSearchDefinition < TDocument >
96
+ {
97
+ private readonly SearchDefinition < TField > _operator ;
98
+
99
+ public EmbeddedDocumentSearchDefinition ( FieldDefinition < TDocument , IEnumerable < TField > > path , SearchDefinition < TField > @operator , SearchScoreDefinition < TDocument > score )
100
+ : base ( OperatorType . EmbeddedDocument ,
101
+ new SingleSearchPathDefinition < TDocument > ( path ) ,
102
+ score )
103
+ {
104
+ _operator = Ensure . IsNotNull ( @operator , nameof ( @operator ) ) ;
105
+ }
106
+
107
+ private protected override BsonDocument RenderArguments ( SearchDefinitionRenderContext < TDocument > renderContext )
108
+ {
109
+ // Add base path to all nested operator paths
110
+ var pathPrefix = _path . Render ( renderContext ) . AsString ;
111
+
112
+ var newRenderContext = new SearchDefinitionRenderContext < TField > (
113
+ renderContext . SerializerRegistry . GetSerializer < TField > ( ) ,
114
+ renderContext . SerializerRegistry ,
115
+ pathPrefix ) ;
116
+
117
+ return new ( "operator" , _operator . Render ( newRenderContext ) ) ;
92
118
}
93
119
}
94
120
@@ -102,7 +128,7 @@ public EqualsSearchDefinition(FieldDefinition<TDocument> path, TField value, Sea
102
128
_value = ToBsonValue ( value ) ;
103
129
}
104
130
105
- private protected override BsonDocument RenderArguments ( IBsonSerializer < TDocument > documentSerializer , IBsonSerializerRegistry serializerRegistry ) =>
131
+ private protected override BsonDocument RenderArguments ( SearchDefinitionRenderContext < TDocument > renderContext ) =>
106
132
new ( "value" , _value ) ;
107
133
108
134
private static BsonValue ToBsonValue ( TField value ) =>
@@ -145,11 +171,11 @@ public FacetSearchDefinition(SearchDefinition<TDocument> @operator, IEnumerable<
145
171
_facets = Ensure . IsNotNull ( facets , nameof ( facets ) ) . ToArray ( ) ;
146
172
}
147
173
148
- private protected override BsonDocument RenderArguments ( IBsonSerializer < TDocument > documentSerializer , IBsonSerializerRegistry serializerRegistry ) =>
174
+ private protected override BsonDocument RenderArguments ( SearchDefinitionRenderContext < TDocument > renderContext ) =>
149
175
new ( )
150
176
{
151
- { "operator" , _operator . Render ( documentSerializer , serializerRegistry ) } ,
152
- { "facets" , new BsonDocument ( _facets . Select ( f => new BsonElement ( f . Name , f . Render ( documentSerializer , serializerRegistry ) ) ) ) }
177
+ { "operator" , _operator . Render ( renderContext ) } ,
178
+ { "facets" , new BsonDocument ( _facets . Select ( f => new BsonElement ( f . Name , f . Render ( renderContext ) ) ) ) }
153
179
} ;
154
180
}
155
181
@@ -170,7 +196,7 @@ public GeoShapeSearchDefinition(
170
196
_relation = relation ;
171
197
}
172
198
173
- private protected override BsonDocument RenderArguments ( IBsonSerializer < TDocument > documentSerializer , IBsonSerializerRegistry serializerRegistry ) =>
199
+ private protected override BsonDocument RenderArguments ( SearchDefinitionRenderContext < TDocument > renderContext ) =>
174
200
new ( )
175
201
{
176
202
{ "geometry" , _geometry . ToBsonDocument ( ) } ,
@@ -192,7 +218,7 @@ public GeoWithinSearchDefinition(
192
218
_area = Ensure . IsNotNull ( area , nameof ( area ) ) ;
193
219
}
194
220
195
- private protected override BsonDocument RenderArguments ( IBsonSerializer < TDocument > documentSerializer , IBsonSerializerRegistry serializerRegistry ) =>
221
+ private protected override BsonDocument RenderArguments ( SearchDefinitionRenderContext < TDocument > renderContext ) =>
196
222
new ( _area . Render ( ) ) ;
197
223
}
198
224
@@ -206,13 +232,13 @@ public MoreLikeThisSearchDefinition(IEnumerable<TLike> like)
206
232
_like = Ensure . IsNotNull ( like , nameof ( like ) ) . ToArray ( ) ;
207
233
}
208
234
209
- private protected override BsonDocument RenderArguments ( IBsonSerializer < TDocument > documentSerializer , IBsonSerializerRegistry serializerRegistry )
235
+ private protected override BsonDocument RenderArguments ( SearchDefinitionRenderContext < TDocument > renderContext )
210
236
{
211
237
var likeSerializer = typeof ( TLike ) switch
212
238
{
213
239
var t when t == typeof ( BsonDocument ) => null ,
214
- var t when t == typeof ( TDocument ) => ( IBsonSerializer < TLike > ) documentSerializer ,
215
- _ => serializerRegistry . GetSerializer < TLike > ( )
240
+ var t when t == typeof ( TDocument ) => ( IBsonSerializer < TLike > ) renderContext . DocumentSerializer ,
241
+ _ => renderContext . SerializerRegistry . GetSerializer < TLike > ( )
216
242
} ;
217
243
218
244
return new ( "like" , new BsonArray ( _like . Select ( document => document . ToBsonDocument ( likeSerializer ) ) ) ) ;
@@ -235,7 +261,7 @@ public NearSearchDefinition(
235
261
_pivot = pivot ;
236
262
}
237
263
238
- private protected override BsonDocument RenderArguments ( IBsonSerializer < TDocument > documentSerializer , IBsonSerializerRegistry serializerRegistry ) =>
264
+ private protected override BsonDocument RenderArguments ( SearchDefinitionRenderContext < TDocument > renderContext ) =>
239
265
new ( )
240
266
{
241
267
{ "origin" , _origin } ,
@@ -259,7 +285,7 @@ public PhraseSearchDefinition(
259
285
_slop = slop ;
260
286
}
261
287
262
- private protected override BsonDocument RenderArguments ( IBsonSerializer < TDocument > documentSerializer , IBsonSerializerRegistry serializerRegistry ) =>
288
+ private protected override BsonDocument RenderArguments ( SearchDefinitionRenderContext < TDocument > renderContext ) =>
263
289
new ( )
264
290
{
265
291
{ "query" , _query . Render ( ) } ,
@@ -269,20 +295,20 @@ private protected override BsonDocument RenderArguments(IBsonSerializer<TDocumen
269
295
270
296
internal sealed class QueryStringSearchDefinition < TDocument > : OperatorSearchDefinition < TDocument >
271
297
{
272
- private readonly FieldDefinition < TDocument > _defaultPath ;
298
+ private readonly SingleSearchPathDefinition < TDocument > _defaultPath ;
273
299
private readonly string _query ;
274
300
275
301
public QueryStringSearchDefinition ( FieldDefinition < TDocument > defaultPath , string query , SearchScoreDefinition < TDocument > score )
276
302
: base ( OperatorType . QueryString , score )
277
303
{
278
- _defaultPath = Ensure . IsNotNull ( defaultPath , nameof ( defaultPath ) ) ;
304
+ _defaultPath = new SingleSearchPathDefinition < TDocument > ( defaultPath ) ;
279
305
_query = Ensure . IsNotNull ( query , nameof ( query ) ) ;
280
306
}
281
307
282
- private protected override BsonDocument RenderArguments ( IBsonSerializer < TDocument > documentSerializer , IBsonSerializerRegistry serializerRegistry ) =>
308
+ private protected override BsonDocument RenderArguments ( SearchDefinitionRenderContext < TDocument > renderContext ) =>
283
309
new ( )
284
310
{
285
- { "defaultPath" , _defaultPath . Render ( documentSerializer , serializerRegistry ) . FieldName } ,
311
+ { "defaultPath" , _defaultPath . Render ( renderContext ) } ,
286
312
{ "query" , _query }
287
313
} ;
288
314
}
@@ -305,7 +331,7 @@ public RangeSearchDefinition(
305
331
_max = ToBsonValue ( _range . Max ) ;
306
332
}
307
333
308
- private protected override BsonDocument RenderArguments ( IBsonSerializer < TDocument > documentSerializer , IBsonSerializerRegistry serializerRegistry ) =>
334
+ private protected override BsonDocument RenderArguments ( SearchDefinitionRenderContext < TDocument > renderContext ) =>
309
335
new ( )
310
336
{
311
337
{ _range . IsMinInclusive ? "gte" : "gt" , _min , _min != null } ,
@@ -347,7 +373,7 @@ public RegexSearchDefinition(
347
373
_allowAnalyzedField = allowAnalyzedField ;
348
374
}
349
375
350
- private protected override BsonDocument RenderArguments ( IBsonSerializer < TDocument > documentSerializer , IBsonSerializerRegistry serializerRegistry ) =>
376
+ private protected override BsonDocument RenderArguments ( SearchDefinitionRenderContext < TDocument > renderContext ) =>
351
377
new ( )
352
378
{
353
379
{ "query" , _query . Render ( ) } ,
@@ -365,8 +391,8 @@ public SpanSearchDefinition(SearchSpanDefinition<TDocument> clause)
365
391
_clause = Ensure . IsNotNull ( clause , nameof ( clause ) ) ;
366
392
}
367
393
368
- private protected override BsonDocument RenderArguments ( IBsonSerializer < TDocument > documentSerializer , IBsonSerializerRegistry serializerRegistry ) =>
369
- _clause . Render ( documentSerializer , serializerRegistry ) ;
394
+ private protected override BsonDocument RenderArguments ( SearchDefinitionRenderContext < TDocument > renderContext ) =>
395
+ _clause . Render ( renderContext ) ;
370
396
}
371
397
372
398
internal sealed class TextSearchDefinition < TDocument > : OperatorSearchDefinition < TDocument >
@@ -385,7 +411,7 @@ public TextSearchDefinition(
385
411
_fuzzy = fuzzy ;
386
412
}
387
413
388
- private protected override BsonDocument RenderArguments ( IBsonSerializer < TDocument > documentSerializer , IBsonSerializerRegistry serializerRegistry ) =>
414
+ private protected override BsonDocument RenderArguments ( SearchDefinitionRenderContext < TDocument > renderContext ) =>
389
415
new ( )
390
416
{
391
417
{ "query" , _query . Render ( ) } ,
@@ -409,7 +435,7 @@ public WildcardSearchDefinition(
409
435
_allowAnalyzedField = allowAnalyzedField ;
410
436
}
411
437
412
- private protected override BsonDocument RenderArguments ( IBsonSerializer < TDocument > documentSerializer , IBsonSerializerRegistry serializerRegistry ) =>
438
+ private protected override BsonDocument RenderArguments ( SearchDefinitionRenderContext < TDocument > renderContext ) =>
413
439
new ( )
414
440
{
415
441
{ "query" , _query . Render ( ) } ,
0 commit comments