Skip to content

Commit ca7ed44

Browse files
committed
- PR comments
1 parent 675a5ed commit ca7ed44

32 files changed

+494
-446
lines changed

src/MongoDB.Driver/AggregateFluent.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ public override IAggregateFluent<TNewResult> ReplaceWith<TNewResult>(AggregateEx
241241

242242
public override IAggregateFluent<TResult> Search(
243243
SearchDefinition<TResult> searchDefinition,
244-
HighlightOptions<TResult> highlight = null,
244+
SearchHighlightOptions<TResult> highlight = null,
245245
string indexName = null,
246246
SearchCountOptions count = null,
247247
bool returnStoredSource = false)

src/MongoDB.Driver/AggregateFluentBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ public virtual IAggregateFluent<TNewResult> ReplaceWith<TNewResult>(AggregateExp
219219
/// <inheritdoc />
220220
public virtual IAggregateFluent<TResult> Search(
221221
SearchDefinition<TResult> query,
222-
HighlightOptions<TResult> highlight = null,
222+
SearchHighlightOptions<TResult> highlight = null,
223223
string indexName = null,
224224
SearchCountOptions count = null,
225225
bool returnStoredSource = false)

src/MongoDB.Driver/Builders.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,21 +40,21 @@ public static class Builders<TDocument>
4040

4141
// Search builders
4242
/// <summary>Gets a <see cref="SearchFacetBuilder{TDocument}"/>.</summary>
43-
public static SearchFacetBuilder<TDocument> Facet { get; } = new SearchFacetBuilder<TDocument>();
43+
public static SearchFacetBuilder<TDocument> SearchFacet { get; } = new SearchFacetBuilder<TDocument>();
4444

45-
/// <summary>Gets a <see cref="PathDefinition{TDocument}"/>.</summary>
46-
public static PathDefinitionBuilder<TDocument> Path { get; } = new PathDefinitionBuilder<TDocument>();
45+
/// <summary>Gets a <see cref="SearchPathDefinition{TDocument}"/>.</summary>
46+
public static SearchPathDefinitionBuilder<TDocument> SearchPath { get; } = new SearchPathDefinitionBuilder<TDocument>();
4747

48-
/// <summary>Gets a <see cref="ScoreDefinitionBuilder{TDocument}"/>.</summary>
49-
public static ScoreDefinitionBuilder<TDocument> Score { get; } = new ScoreDefinitionBuilder<TDocument>();
48+
/// <summary>Gets a <see cref="SearchScoreDefinitionBuilder{TDocument}"/>.</summary>
49+
public static SearchScoreDefinitionBuilder<TDocument> SearchScore { get; } = new SearchScoreDefinitionBuilder<TDocument>();
5050

51-
/// <summary>Gets a <see cref="ScoreFunctionBuilder{TDocument}"/>.</summary>
52-
public static ScoreFunctionBuilder<TDocument> ScoreFunction { get; } = new ScoreFunctionBuilder<TDocument>();
51+
/// <summary>Gets a <see cref="SearchScoreFunctionBuilder{TDocument}"/>.</summary>
52+
public static SearchScoreFunctionBuilder<TDocument> SearchScoreFunction { get; } = new SearchScoreFunctionBuilder<TDocument>();
5353

5454
/// <summary>Gets a <see cref="SearchDefinitionBuilder{TDocument}"/>.</summary>
5555
public static SearchDefinitionBuilder<TDocument> Search { get; } = new SearchDefinitionBuilder<TDocument>();
5656

57-
/// <summary> Gets a <see cref="SpanDefinitionBuilder{TDocument}"/>.</summary>
58-
public static SpanDefinitionBuilder<TDocument> Span { get; } = new SpanDefinitionBuilder<TDocument>();
57+
/// <summary> Gets a <see cref="SearchSpanDefinitionBuilder{TDocument}"/>.</summary>
58+
public static SearchSpanDefinitionBuilder<TDocument> SearchSpan { get; } = new SearchSpanDefinitionBuilder<TDocument>();
5959
}
6060
}

src/MongoDB.Driver/IAggregateFluent.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,7 @@ IAggregateFluent<BsonDocument> SetWindowFields<TWindowFields>(
368368
/// <returns>The fluent aggregate interface.</returns>
369369
IAggregateFluent<TResult> Search(
370370
SearchDefinition<TResult> searchDefinition,
371-
HighlightOptions<TResult> highlight = null,
371+
SearchHighlightOptions<TResult> highlight = null,
372372
string indexName = null,
373373
SearchCountOptions count = null,
374374
bool returnStoredSource = false);

src/MongoDB.Driver/Linq/MongoQueryable.cs

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ public static IMongoQueryable<TResult> AppendStage<TSource, TResult>(
8888
GetMethodInfo(AppendStage, source, stage, resultSerializer),
8989
Expression.Convert(source.Expression, typeof(IMongoQueryable<TSource>)),
9090
Expression.Constant(stage),
91-
Expression.Constant(resultSerializer, typeof(IBsonSerializer<TSource>))));
91+
Expression.Constant(resultSerializer, typeof(IBsonSerializer<TResult>))));
9292
}
9393

9494
/// <summary>
@@ -941,7 +941,7 @@ public static IMongoQueryable<TSource> Sample<TSource>(this IMongoQueryable<TSou
941941
public static IMongoQueryable<TSource> Search<TSource>(
942942
this IMongoQueryable<TSource> source,
943943
SearchDefinition<TSource> searchDefinition,
944-
HighlightOptions<TSource> highlight = null,
944+
SearchHighlightOptions<TSource> highlight = null,
945945
string indexName = null,
946946
SearchCountOptions count = null,
947947
bool returnStoredSource = false)
@@ -951,6 +951,26 @@ public static IMongoQueryable<TSource> Search<TSource>(
951951
PipelineStageDefinitionBuilder.Search(searchDefinition, highlight, indexName, count, returnStoredSource));
952952
}
953953

954+
/// <summary>
955+
/// Appends a $searchMeta stage to the LINQ pipeline
956+
/// </summary>
957+
/// <typeparam name="TSource">The type of the elements of <paramref name="source" />.</typeparam>
958+
/// <param name="source">A sequence of values.</param>
959+
/// <param name="searchDefinition">The search definition.</param>
960+
/// <param name="indexName">The index name.</param>
961+
/// <param name="count">The count options.</param>
962+
/// <returns>The fluent aggregate interface.</returns>
963+
public static IMongoQueryable<SearchMetaResult> SearchMeta<TSource>(
964+
this IMongoQueryable<TSource> source,
965+
SearchDefinition<TSource> searchDefinition,
966+
string indexName = null,
967+
SearchCountOptions count = null)
968+
{
969+
return AppendStage(
970+
source,
971+
PipelineStageDefinitionBuilder.SearchMeta(searchDefinition, indexName, count));
972+
}
973+
954974
/// <summary>
955975
/// Projects each element of a sequence into a new form by incorporating the
956976
/// element's index.

src/MongoDB.Driver/PipelineDefinitionBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1183,7 +1183,7 @@ public static PipelineDefinition<TInput, TOutput> ReplaceWith<TInput, TIntermedi
11831183
public static PipelineDefinition<TInput, TOutput> Search<TInput, TOutput>(
11841184
this PipelineDefinition<TInput, TOutput> pipeline,
11851185
SearchDefinition<TOutput> searchDefinition,
1186-
HighlightOptions<TOutput> highlight = null,
1186+
SearchHighlightOptions<TOutput> highlight = null,
11871187
string indexName = null,
11881188
SearchCountOptions count = null,
11891189
bool returnStoredSource = false)

src/MongoDB.Driver/PipelineStageDefinitionBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1324,7 +1324,7 @@ public static PipelineStageDefinition<TInput, TOutput> Project<TInput, TOutput>(
13241324
/// <returns>The stage.</returns>
13251325
public static PipelineStageDefinition<TInput, TInput> Search<TInput>(
13261326
SearchDefinition<TInput> searchDefinition,
1327-
HighlightOptions<TInput> highlight = null,
1327+
SearchHighlightOptions<TInput> highlight = null,
13281328
string indexName = null,
13291329
SearchCountOptions count = null,
13301330
bool returnStoredSource = false)

src/MongoDB.Driver/Search/CompoundFluentImpl.cs

Lines changed: 0 additions & 57 deletions
This file was deleted.

src/MongoDB.Driver/Search/CompoundFluent.cs renamed to src/MongoDB.Driver/Search/CompoundSearchDefinitionFluent.cs

Lines changed: 37 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,28 +13,36 @@
1313
// limitations under the License.
1414

1515
using System.Collections.Generic;
16+
using MongoDB.Driver.Core.Misc;
1617

1718
namespace MongoDB.Driver.Search
1819
{
1920
/// <summary>
2021
/// Fluent interface for compound search definitions.
2122
/// </summary>
2223
/// <typeparam name="TDocument">The type of the document.</typeparam>
23-
public abstract class CompoundFluent<TDocument>
24+
public sealed class CompoundSearchDefinitionFluent<TDocument>
2425
{
26+
private List<SearchDefinition<TDocument>> _must;
27+
private List<SearchDefinition<TDocument>> _mustNot;
28+
private List<SearchDefinition<TDocument>> _should;
29+
private List<SearchDefinition<TDocument>> _filter;
30+
private int _minimumShouldMatch = 0;
31+
2532
/// <summary>
2633
/// Adds clauses which must match to produce results.
2734
/// </summary>
2835
/// <param name="clauses">The clauses.</param>
2936
/// <returns>The compound fluent interface.</returns>
30-
public abstract CompoundFluent<TDocument> Must(IEnumerable<SearchDefinition<TDocument>> clauses);
37+
public CompoundSearchDefinitionFluent<TDocument> Must(IEnumerable<SearchDefinition<TDocument>> clauses) =>
38+
AddClauses(ref _must, clauses);
3139

3240
/// <summary>
3341
/// Adds clauses which must match to produce results.
3442
/// </summary>
3543
/// <param name="clauses">The clauses.</param>
3644
/// <returns>The compound fluent interface.</returns>
37-
public CompoundFluent<TDocument> Must(params SearchDefinition<TDocument>[] clauses) =>
45+
public CompoundSearchDefinitionFluent<TDocument> Must(params SearchDefinition<TDocument>[] clauses) =>
3846
Must((IEnumerable<SearchDefinition<TDocument>>)clauses);
3947

4048
/// <summary>
@@ -43,15 +51,16 @@ public CompoundFluent<TDocument> Must(params SearchDefinition<TDocument>[] claus
4351
/// </summary>
4452
/// <param name="clauses">The clauses.</param>
4553
/// <returns>The compound fluent interface.</returns>
46-
public abstract CompoundFluent<TDocument> MustNot(IEnumerable<SearchDefinition<TDocument>> clauses);
54+
public CompoundSearchDefinitionFluent<TDocument> MustNot(IEnumerable<SearchDefinition<TDocument>> clauses) =>
55+
AddClauses(ref _mustNot, clauses);
4756

4857
/// <summary>
4958
/// Adds clauses which must not match for a document to be included in the
5059
/// results.
5160
/// </summary>
5261
/// <param name="clauses">The clauses.</param>
5362
/// <returns>The compound fluent interface.</returns>
54-
public CompoundFluent<TDocument> MustNot(params SearchDefinition<TDocument>[] clauses) =>
63+
public CompoundSearchDefinitionFluent<TDocument> MustNot(params SearchDefinition<TDocument>[] clauses) =>
5564
MustNot((IEnumerable<SearchDefinition<TDocument>>)clauses);
5665

5766
/// <summary>
@@ -60,15 +69,16 @@ public CompoundFluent<TDocument> MustNot(params SearchDefinition<TDocument>[] cl
6069
/// </summary>
6170
/// <param name="clauses">The clauses.</param>
6271
/// <returns>The compound fluent interface.</returns>
63-
public abstract CompoundFluent<TDocument> Should(IEnumerable<SearchDefinition<TDocument>> clauses);
72+
public CompoundSearchDefinitionFluent<TDocument> Should(IEnumerable<SearchDefinition<TDocument>> clauses) =>
73+
AddClauses(ref _should, clauses);
6474

6575
/// <summary>
6676
/// Adds clauses which cause documents in the result set to be scored higher if
6777
/// they match.
6878
/// </summary>
6979
/// <param name="clauses">The clauses.</param>
7080
/// <returns>The compound fluent interface.</returns>
71-
public CompoundFluent<TDocument> Should(params SearchDefinition<TDocument>[] clauses) =>
81+
public CompoundSearchDefinitionFluent<TDocument> Should(params SearchDefinition<TDocument>[] clauses) =>
7282
Should((IEnumerable<SearchDefinition<TDocument>>)clauses);
7383

7484
/// <summary>
@@ -77,15 +87,16 @@ public CompoundFluent<TDocument> Should(params SearchDefinition<TDocument>[] cla
7787
/// </summary>
7888
/// <param name="clauses">The clauses.</param>
7989
/// <returns>The compound fluent interface.</returns>
80-
public abstract CompoundFluent<TDocument> Filter(IEnumerable<SearchDefinition<TDocument>> clauses);
90+
public CompoundSearchDefinitionFluent<TDocument> Filter(IEnumerable<SearchDefinition<TDocument>> clauses) =>
91+
AddClauses(ref _filter, clauses);
8192

8293
/// <summary>
8394
/// Adds clauses which must all match for a document to be included in the
8495
/// results.
8596
/// </summary>
8697
/// <param name="clauses">The clauses.</param>
8798
/// <returns>The compound fluent interface.</returns>
88-
public CompoundFluent<TDocument> Filter(params SearchDefinition<TDocument>[] clauses) =>
99+
public CompoundSearchDefinitionFluent<TDocument> Filter(params SearchDefinition<TDocument>[] clauses) =>
89100
Filter((IEnumerable<SearchDefinition<TDocument>>)clauses);
90101

91102
/// <summary>
@@ -94,21 +105,34 @@ public CompoundFluent<TDocument> Filter(params SearchDefinition<TDocument>[] cla
94105
/// </summary>
95106
/// <param name="minimumShouldMatch">The value to set.</param>
96107
/// <returns>The compound fluent interface.</returns>
97-
public abstract CompoundFluent<TDocument> MinimumShouldMatch(int minimumShouldMatch);
108+
public CompoundSearchDefinitionFluent<TDocument> MinimumShouldMatch(int minimumShouldMatch)
109+
{
110+
_minimumShouldMatch = minimumShouldMatch;
111+
return this;
112+
}
98113

99114
/// <summary>
100115
/// Constructs a search definition from the fluent interface.
101116
/// </summary>
102117
/// <returns>A compound search definition.</returns>
103-
public abstract SearchDefinition<TDocument> ToSearchDefinition();
118+
public SearchDefinition<TDocument> ToSearchDefinition() =>
119+
new CompoundSearchDefinition<TDocument>(_must, _mustNot, _should, _filter, _minimumShouldMatch);
104120

105121
/// <summary>
106-
/// Performs an implicit conversion from a <see cref="CompoundFluent{TDocument}"/>
122+
/// Performs an implicit conversion from a <see cref="CompoundSearchDefinitionFluent{TDocument}"/>
107123
/// to a <see cref="SearchDefinition{TDocument}"/>.
108124
/// </summary>
109125
/// <param name="compound">The compound fluent interface.</param>
110126
/// <returns>The result of the conversion.</returns>
111-
public static implicit operator SearchDefinition<TDocument>(CompoundFluent<TDocument> compound) =>
127+
public static implicit operator SearchDefinition<TDocument>(CompoundSearchDefinitionFluent<TDocument> compound) =>
112128
compound.ToSearchDefinition();
129+
130+
private CompoundSearchDefinitionFluent<TDocument> AddClauses(ref List<SearchDefinition<TDocument>> clauses, IEnumerable<SearchDefinition<TDocument>> newClauses)
131+
{
132+
clauses ??= new();
133+
clauses.AddRange(Ensure.IsNotNull(newClauses, nameof(newClauses)));
134+
135+
return this;
136+
}
113137
}
114138
}

src/MongoDB.Driver/Search/GeoWithin.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
namespace MongoDB.Driver.Search
2020
{
2121
/// <summary>
22-
/// Base class for objects specifying GeoWith query
22+
/// Base class for objects specifying GeoWithin query
2323
/// search within.
2424
/// </summary>
2525
/// <typeparam name="TCoordinates">The type of the coordinates.</typeparam>
@@ -105,7 +105,7 @@ public GeoWithinGeometry(GeoJsonGeometry<TCoordinates> geometry)
105105
Geometry = Ensure.IsNotNull(geometry, nameof(geometry));
106106
}
107107

108-
/// <summary> Gets the bottom left GeoJSON point. </summary>
108+
/// <summary>Gets the GeoJson geometry.</summary>
109109
public GeoJsonGeometry<TCoordinates> Geometry { get; }
110110

111111
internal override BsonElement Render() => new("geometry", Geometry.ToBsonDocument());

0 commit comments

Comments
 (0)