Skip to content

Commit 90e4445

Browse files
prchaozrstam
authored andcommitted
CSHARP-1893: New DistinctMany method which is like Distinct but for array fields.
1 parent 30913b4 commit 90e4445

8 files changed

+727
-3
lines changed

src/MongoDB.Driver/FilteredMongoCollectionBase.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,15 @@ protected IMongoCollection<TDocument> WrappedCollection
201201
{
202202
return _wrappedCollection.Distinct(session, field, CombineFilters(filter), options, cancellationToken);
203203
}
204+
public override IAsyncCursor<TItem> Distinct<TField, TItem>(FieldDefinition<TDocument, TField> field, FilterDefinition<TDocument> filter, DistinctOptions options = null, CancellationToken cancellationToken = default)
205+
{
206+
return _wrappedCollection.Distinct<TField, TItem>(field, CombineFilters(filter), options, cancellationToken);
207+
}
208+
209+
public override IAsyncCursor<TItem> Distinct<TField, TItem>(IClientSessionHandle session, FieldDefinition<TDocument, TField> field, FilterDefinition<TDocument> filter, DistinctOptions options = null, CancellationToken cancellationToken = default)
210+
{
211+
return _wrappedCollection.Distinct<TField, TItem>(session, field, CombineFilters(filter), options, cancellationToken);
212+
}
204213

205214
public override Task<IAsyncCursor<TField>> DistinctAsync<TField>(FieldDefinition<TDocument, TField> field, FilterDefinition<TDocument> filter, DistinctOptions options = null, CancellationToken cancellationToken = default(CancellationToken))
206215
{
@@ -212,6 +221,16 @@ protected IMongoCollection<TDocument> WrappedCollection
212221
return _wrappedCollection.DistinctAsync(session, field, CombineFilters(filter), options, cancellationToken);
213222
}
214223

224+
public override Task<IAsyncCursor<TItem>> DistinctAsync<TField, TItem>(FieldDefinition<TDocument, TField> field, FilterDefinition<TDocument> filter, DistinctOptions options = null, CancellationToken cancellationToken = default)
225+
{
226+
return _wrappedCollection.DistinctAsync<TField, TItem>(field, CombineFilters(filter), options, cancellationToken);
227+
}
228+
229+
public override Task<IAsyncCursor<TItem>> DistinctAsync<TField, TItem>(IClientSessionHandle session, FieldDefinition<TDocument, TField> field, FilterDefinition<TDocument> filter, DistinctOptions options = null, CancellationToken cancellationToken = default)
230+
{
231+
return _wrappedCollection.DistinctAsync<TField, TItem>(session, field, CombineFilters(filter), options, cancellationToken);
232+
}
233+
215234
public override long EstimatedDocumentCount(EstimatedDocumentCountOptions options = null, CancellationToken cancellationToken = default(CancellationToken))
216235
{
217236
throw new NotSupportedException("EstimatedDocumentCount is not supported for filtered collections.");

src/MongoDB.Driver/IMongoCollection.cs

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -508,6 +508,33 @@ public interface IMongoCollection<TDocument>
508508
/// </returns>
509509
IAsyncCursor<TField> Distinct<TField>(IClientSessionHandle session, FieldDefinition<TDocument, TField> field, FilterDefinition<TDocument> filter, DistinctOptions options = null, CancellationToken cancellationToken = default(CancellationToken));
510510

511+
/// <summary>
512+
/// Gets the distinct values for a specified array field.
513+
/// </summary>
514+
/// <typeparam name="TField">The type of the field.</typeparam>
515+
/// <typeparam name="TItem">The type of the result.</typeparam>
516+
/// <param name="field">The field.</param>
517+
/// <param name="filter">The filter.</param>
518+
/// <param name="options">The options.</param>
519+
/// <param name="cancellationToken">The cancellation token.</param>
520+
/// <returns>A cursor.</returns>
521+
IAsyncCursor<TItem> Distinct<TField, TItem>(FieldDefinition<TDocument, TField> field, FilterDefinition<TDocument> filter, DistinctOptions options = null, CancellationToken cancellationToken = default(CancellationToken))
522+
where TField : IEnumerable<TItem>;
523+
524+
/// <summary>
525+
/// Gets the distinct values for a specified array field.
526+
/// </summary>
527+
/// <typeparam name="TField">The type of the field.</typeparam>
528+
/// <typeparam name="TItem">The type of the result.</typeparam>
529+
/// <param name="session">The session.</param>
530+
/// <param name="field">The field.</param>
531+
/// <param name="filter">The filter.</param>
532+
/// <param name="options">The options.</param>
533+
/// <param name="cancellationToken">The cancellation token.</param>
534+
/// <returns>A cursor.</returns>
535+
IAsyncCursor<TItem> Distinct<TField, TItem>(IClientSessionHandle session, FieldDefinition<TDocument, TField> field, FilterDefinition<TDocument> filter, DistinctOptions options = null, CancellationToken cancellationToken = default(CancellationToken))
536+
where TField : IEnumerable<TItem>;
537+
511538
/// <summary>
512539
/// Gets the distinct values for a specified field.
513540
/// </summary>
@@ -533,6 +560,33 @@ public interface IMongoCollection<TDocument>
533560
/// </returns>
534561
Task<IAsyncCursor<TField>> DistinctAsync<TField>(IClientSessionHandle session, FieldDefinition<TDocument, TField> field, FilterDefinition<TDocument> filter, DistinctOptions options = null, CancellationToken cancellationToken = default(CancellationToken));
535562

563+
/// <summary>
564+
/// Gets the distinct values for a specified array field.
565+
/// </summary>
566+
/// <typeparam name="TField">The type of the field.</typeparam>
567+
/// <typeparam name="TItem">The type of the result.</typeparam>
568+
/// <param name="field">The field.</param>
569+
/// <param name="filter">The filter.</param>
570+
/// <param name="options">The options.</param>
571+
/// <param name="cancellationToken">The cancellation token.</param>
572+
/// <returns>A cursor.</returns>
573+
Task<IAsyncCursor<TItem>> DistinctAsync<TField, TItem>(FieldDefinition<TDocument, TField> field, FilterDefinition<TDocument> filter, DistinctOptions options = null, CancellationToken cancellationToken = default(CancellationToken))
574+
where TField : IEnumerable<TItem>;
575+
576+
/// <summary>
577+
/// Gets the distinct values for a specified array field.
578+
/// </summary>
579+
/// <typeparam name="TField">The type of the field.</typeparam>
580+
/// <typeparam name="TItem">The type of the result.</typeparam>
581+
/// <param name="session">The session.</param>
582+
/// <param name="field">The field.</param>
583+
/// <param name="filter">The filter.</param>
584+
/// <param name="options">The options.</param>
585+
/// <param name="cancellationToken">The cancellation token.</param>
586+
/// <returns>A cursor.</returns>
587+
Task<IAsyncCursor<TItem>> DistinctAsync<TField, TItem>(IClientSessionHandle session, FieldDefinition<TDocument, TField> field, FilterDefinition<TDocument> filter, DistinctOptions options = null, CancellationToken cancellationToken = default(CancellationToken))
588+
where TField : IEnumerable<TItem>;
589+
536590
/// <summary>
537591
/// Returns an estimate of the number of documents in the collection.
538592
/// </summary>

0 commit comments

Comments
 (0)