Skip to content

Commit 4723bea

Browse files
committed
Improvement
1 parent 7d8ae20 commit 4723bea

File tree

3 files changed

+15
-12
lines changed

3 files changed

+15
-12
lines changed

Diff for: src/MongoDB.Driver/Search/SearchDefinition.cs

+5-7
Original file line numberDiff line numberDiff line change
@@ -157,17 +157,15 @@ public override BsonDocument Render(RenderArgs<TDocument> args)
157157
{
158158
BsonDocument renderedArgs;
159159

160-
if (_path is SingleSearchPathDefinition<TDocument> singleSearchPathDefinition)
160+
if (_path is null)
161161
{
162-
// Special case for SingleSearchPathDefinition in order to avoid rendering the path twice
163-
var (renderedPath, renderedField) = _path.GetRenderedFieldAndStringPath(singleSearchPathDefinition.Field, args);
164-
renderedArgs = RenderArguments(args, renderedField.FieldSerializer);
165-
renderedArgs.Add("path", renderedPath);
162+
renderedArgs = RenderArguments(args);
166163
}
167164
else
168165
{
169-
renderedArgs = RenderArguments(args);
170-
renderedArgs.Add("path", () => _path.Render(args), _path != null);
166+
var (renderedPath, fieldSerializer) = _path.RenderAndGetFieldSerializer(args);
167+
renderedArgs = RenderArguments(args, fieldSerializer);
168+
renderedArgs.Add("path", renderedPath);
171169
}
172170

173171
renderedArgs.Add("score", () => _score.Render(args), _score != null);

Diff for: src/MongoDB.Driver/Search/SearchPathDefinition.cs

+6-3
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
using System.Collections.Generic;
1717
using System.Linq;
1818
using MongoDB.Bson;
19+
using MongoDB.Bson.Serialization;
1920

2021
namespace MongoDB.Driver.Search
2122
{
@@ -104,15 +105,17 @@ public static implicit operator SearchPathDefinition<TDocument>(List<string> fie
104105
/// <param name="args">The render arguments.</param>
105106
/// <returns>The rendered field.</returns>
106107
protected string RenderField(FieldDefinition<TDocument> fieldDefinition, RenderArgs<TDocument> args)
107-
=> GetRenderedFieldAndStringPath(fieldDefinition, args).renderedPath;
108+
=> RenderFieldWithSerializer(fieldDefinition, args).renderedPath;
108109

109-
internal (string renderedPath, RenderedFieldDefinition renderedFieldDefinition) GetRenderedFieldAndStringPath(FieldDefinition<TDocument> fieldDefinition, RenderArgs<TDocument> args)
110+
internal virtual (BsonValue, IBsonSerializer) RenderAndGetFieldSerializer(RenderArgs<TDocument> args) => (Render(args), null);
111+
112+
internal (string renderedPath, IBsonSerializer fieldSerializer) RenderFieldWithSerializer(FieldDefinition<TDocument> fieldDefinition, RenderArgs<TDocument> args)
110113
{
111114
var renderedField = fieldDefinition.Render(args);
112115
var prefix = args.PathRenderArgs.PathPrefix;
113116
var renderedString = prefix == null ? renderedField.FieldName : $"{prefix}.{renderedField.FieldName}";
114117

115-
return (renderedString, renderedField);
118+
return (renderedString, renderedField.FieldSerializer);
116119
}
117120
}
118121
}

Diff for: src/MongoDB.Driver/Search/SearchPathDefinitionBuilder.cs

+4-2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
using System.Linq;
1919
using System.Linq.Expressions;
2020
using MongoDB.Bson;
21+
using MongoDB.Bson.Serialization;
2122
using MongoDB.Driver.Core.Misc;
2223

2324
namespace MongoDB.Driver.Search
@@ -137,15 +138,16 @@ internal sealed class SingleSearchPathDefinition<TDocument> : SearchPathDefiniti
137138
{
138139
private readonly FieldDefinition<TDocument> _field;
139140

140-
public FieldDefinition<TDocument> Field => _field;
141-
142141
public SingleSearchPathDefinition(FieldDefinition<TDocument> field)
143142
{
144143
_field = Ensure.IsNotNull(field, nameof(field));
145144
}
146145

147146
public override BsonValue Render(RenderArgs<TDocument> args) =>
148147
RenderField(_field, args);
148+
149+
internal override (BsonValue, IBsonSerializer) RenderAndGetFieldSerializer(RenderArgs<TDocument> args)
150+
=> RenderFieldWithSerializer(_field, args);
149151
}
150152

151153
internal sealed class WildcardSearchPathDefinition<TDocument> : SearchPathDefinition<TDocument>

0 commit comments

Comments
 (0)