using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Threading; using System.Threading.Tasks; using MongoDB.Driver; using MongoDbGenericRepository.Models; namespace MongoDbGenericRepository { /// /// The base Repository, it is meant to be inherited from by your custom custom MongoRepository implementation. /// Its constructor must be given a connection string and a database name. /// public abstract class ReadOnlyMongoRepository : ReadOnlyMongoRepository, IReadOnlyMongoRepository { /// /// The constructor taking a connection string and a database name. /// /// The connection string of the MongoDb server. /// The name of the database against which you want to perform operations. protected ReadOnlyMongoRepository(string connectionString, string databaseName = null) : base(connectionString, databaseName) { } /// /// The constructor taking a . /// /// A mongodb context implementing protected ReadOnlyMongoRepository(IMongoDbContext mongoDbContext) : base(mongoDbContext) { } /// /// The constructor taking a . /// /// A mongodb context implementing protected ReadOnlyMongoRepository(IMongoDatabase mongoDatabase) : base(mongoDatabase) { } /// /// Gets a collections for a potentially partitioned document type. /// /// The document type. /// The type of the primary key. /// The document. /// public virtual IMongoCollection HandlePartitioned(TDocument document) where TDocument : IDocument where TKey : IEquatable { return MongoDbReader.HandlePartitioned(document); } /// /// Gets a collections for a potentially partitioned document type. /// /// The document type. /// The type of the primary key. /// The collection partition key. /// public virtual IMongoCollection HandlePartitioned(string partitionKey) where TDocument : IDocument where TKey : IEquatable { if (!string.IsNullOrEmpty(partitionKey)) { return GetCollection(partitionKey); } return GetCollection(); } /// /// Gets a collections for a potentially partitioned document type. /// /// The document type. /// The document. /// public virtual IMongoCollection HandlePartitioned(TDocument document) where TDocument : IDocument { return MongoDbReader.HandlePartitioned(document); } /// /// Gets a collections for the type TDocument with a partition key. /// /// The document type. /// The type of the primary key. /// The collection partition key. /// public virtual IMongoCollection GetCollection(string partitionKey = null) where TDocument : IDocument where TKey : IEquatable { return MongoDbReader.GetCollection(partitionKey); } #region Read TKey /// public virtual async Task GetByIdAsync(TKey id) where TDocument : IDocument where TKey : IEquatable { return await GetByIdAsync(id, null, CancellationToken.None); } /// public virtual async Task GetByIdAsync(TKey id, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return await GetByIdAsync(id, null, cancellationToken); } /// public virtual async Task GetByIdAsync(TKey id, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return await GetByIdAsync(id, partitionKey, CancellationToken.None); } /// public virtual async Task GetByIdAsync(TKey id, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return await MongoDbReader.GetByIdAsync(id, partitionKey, cancellationToken); } /// public virtual TDocument GetById(TKey id) where TDocument : IDocument where TKey : IEquatable { return GetById(id, null, CancellationToken.None); } /// public virtual TDocument GetById(TKey id, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return GetById(id, null, cancellationToken); } /// public virtual TDocument GetById(TKey id, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return GetById(id, partitionKey, CancellationToken.None); } /// public virtual TDocument GetById(TKey id, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return MongoDbReader.GetById(id, partitionKey, cancellationToken); } /// public Task GetOneAsync(FilterDefinition condition) where TDocument : IDocument where TKey : IEquatable { return GetOneAsync(condition, null, null, CancellationToken.None); } /// public Task GetOneAsync(FilterDefinition condition, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return GetOneAsync(condition, null, null, cancellationToken); } /// public Task GetOneAsync(FilterDefinition condition, FindOptions findOption) where TDocument : IDocument where TKey : IEquatable { return GetOneAsync(condition, findOption, null, CancellationToken.None); } /// public Task GetOneAsync(FilterDefinition condition, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return GetOneAsync(condition, null, partitionKey, CancellationToken.None); } /// public Task GetOneAsync(FilterDefinition condition, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return GetOneAsync(condition, null, partitionKey, cancellationToken); } /// public Task GetOneAsync(FilterDefinition condition, FindOptions findOption, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return GetOneAsync(condition, findOption, null, cancellationToken); } /// public Task GetOneAsync(FilterDefinition condition, FindOptions findOption, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return GetOneAsync(condition, findOption, partitionKey, CancellationToken.None); } /// public Task GetOneAsync( FilterDefinition condition, FindOptions findOption, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return MongoDbReader.GetOneAsync(condition, findOption, partitionKey, cancellationToken); } /// public TDocument GetOne(FilterDefinition condition) where TDocument : IDocument where TKey : IEquatable { return GetOne(condition, null, null, CancellationToken.None); } /// public TDocument GetOne(FilterDefinition condition, FindOptions findOption) where TDocument : IDocument where TKey : IEquatable { return GetOne(condition, findOption, null, CancellationToken.None); } /// public TDocument GetOne(FilterDefinition condition, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return GetOne(condition, null, partitionKey, CancellationToken.None); } /// public TDocument GetOne(FilterDefinition condition, FindOptions findOption, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return GetOne(condition, findOption, partitionKey, CancellationToken.None); } /// public TDocument GetOne(FilterDefinition condition, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return GetOne(condition, null, null, cancellationToken); } /// public TDocument GetOne(FilterDefinition condition, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return GetOne(condition, null, partitionKey, cancellationToken); } /// public TDocument GetOne(FilterDefinition condition, FindOptions findOption, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return GetOne(condition, findOption, null, cancellationToken); } /// public TDocument GetOne( FilterDefinition condition, FindOptions findOption, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return MongoDbReader.GetOne(condition, findOption, partitionKey, cancellationToken); } /// public virtual async Task GetOneAsync(Expression> filter) where TDocument : IDocument where TKey : IEquatable { return await GetOneAsync(filter, null, CancellationToken.None); } /// public virtual async Task GetOneAsync(Expression> filter, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return await GetOneAsync(filter, partitionKey, CancellationToken.None); } /// public virtual async Task GetOneAsync(Expression> filter, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return await GetOneAsync(filter, null, cancellationToken); } /// public virtual async Task GetOneAsync( Expression> filter, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return await MongoDbReader.GetOneAsync(filter, partitionKey, cancellationToken); } /// public virtual TDocument GetOne(Expression> filter) where TDocument : IDocument where TKey : IEquatable { return GetOne(filter, null, CancellationToken.None); } /// public virtual TDocument GetOne(Expression> filter, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return GetOne(filter, partitionKey, CancellationToken.None); } /// public virtual TDocument GetOne(Expression> filter, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return GetOne(filter, null, cancellationToken); } /// public virtual TDocument GetOne(Expression> filter, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return MongoDbReader.GetOne(filter, partitionKey, cancellationToken); } /// public virtual IFindFluent GetCursor(Expression> filter, string partitionKey = null) where TDocument : IDocument where TKey : IEquatable { return MongoDbReader.GetCursor(filter, partitionKey); } /// public Task AnyAsync(FilterDefinition condition) where TDocument : IDocument where TKey : IEquatable { return AnyAsync(condition, null, null, CancellationToken.None); } /// public Task AnyAsync(FilterDefinition condition, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return AnyAsync(condition, null, partitionKey, CancellationToken.None); } /// public Task AnyAsync(FilterDefinition condition, CountOptions countOption) where TDocument : IDocument where TKey : IEquatable { return AnyAsync(condition, countOption, null, CancellationToken.None); } /// public Task AnyAsync(FilterDefinition condition, CountOptions countOption, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return AnyAsync(condition, countOption, partitionKey, CancellationToken.None); } /// public Task AnyAsync(FilterDefinition condition, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return AnyAsync(condition, null, null, cancellationToken); } /// public Task AnyAsync(FilterDefinition condition, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return AnyAsync(condition, null, partitionKey, cancellationToken); } /// public Task AnyAsync(FilterDefinition condition, CountOptions countOption, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return AnyAsync(condition, countOption, null, cancellationToken); } /// public Task AnyAsync( FilterDefinition condition, CountOptions countOption, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return MongoDbReader.AnyAsync(condition, countOption, partitionKey, cancellationToken); } /// public bool Any(FilterDefinition condition) where TDocument : IDocument where TKey : IEquatable { return Any(condition, null, null, CancellationToken.None); } /// public bool Any(FilterDefinition condition, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return Any(condition, null, partitionKey, CancellationToken.None); } /// public bool Any(FilterDefinition condition, CountOptions countOption) where TDocument : IDocument where TKey : IEquatable { return Any(condition, countOption, null, CancellationToken.None); } /// public bool Any(FilterDefinition condition, CountOptions countOption, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return MongoDbReader.Any(condition, countOption, partitionKey, CancellationToken.None); } /// public bool Any(FilterDefinition condition, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return Any(condition, null, null, cancellationToken); } /// public bool Any(FilterDefinition condition, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return Any(condition, null, partitionKey, cancellationToken); } /// public bool Any(FilterDefinition condition, CountOptions countOption, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return Any(condition, countOption, null, cancellationToken); } /// public bool Any( FilterDefinition condition, CountOptions countOption, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return MongoDbReader.Any(condition, countOption, partitionKey, cancellationToken); } /// public virtual async Task AnyAsync(Expression> filter) where TDocument : IDocument where TKey : IEquatable { return await AnyAsync(filter, null, CancellationToken.None); } /// public virtual async Task AnyAsync(Expression> filter, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return await AnyAsync(filter, null, cancellationToken); } /// public virtual async Task AnyAsync(Expression> filter, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return await AnyAsync(filter, partitionKey, CancellationToken.None); } /// public virtual async Task AnyAsync( Expression> filter, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return await MongoDbReader.AnyAsync(filter, partitionKey, cancellationToken); } /// public virtual bool Any(Expression> filter) where TDocument : IDocument where TKey : IEquatable { return MongoDbReader.Any(filter, null, CancellationToken.None); } /// public virtual bool Any(Expression> filter, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return MongoDbReader.Any(filter, null, cancellationToken); } /// public virtual bool Any(Expression> filter, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return Any(filter, partitionKey, CancellationToken.None); } /// public virtual bool Any(Expression> filter, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return MongoDbReader.Any(filter, partitionKey, cancellationToken); } /// public Task> GetAllAsync(FilterDefinition condition) where TDocument : IDocument where TKey : IEquatable { return GetAllAsync(condition, null, null, CancellationToken.None); } /// public Task> GetAllAsync(FilterDefinition condition, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return GetAllAsync(condition, null, partitionKey, CancellationToken.None); } /// public Task> GetAllAsync(FilterDefinition condition, FindOptions findOption) where TDocument : IDocument where TKey : IEquatable { return GetAllAsync(condition, findOption, null, CancellationToken.None); } /// public Task> GetAllAsync(FilterDefinition condition, FindOptions findOption, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return GetAllAsync(condition, findOption, partitionKey, CancellationToken.None); } /// public Task> GetAllAsync(FilterDefinition condition, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return GetAllAsync(condition, null, null, cancellationToken); } /// public Task> GetAllAsync( FilterDefinition condition, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return GetAllAsync(condition, null, partitionKey, cancellationToken); } /// public Task> GetAllAsync( FilterDefinition condition, FindOptions findOption, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return GetAllAsync(condition, findOption, null, cancellationToken); } /// public Task> GetAllAsync( FilterDefinition condition, FindOptions findOption, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return MongoDbReader.GetAllAsync(condition, findOption, partitionKey, cancellationToken); } /// public List GetAll(FilterDefinition condition) where TDocument : IDocument where TKey : IEquatable { return GetAll(condition, null, null, CancellationToken.None); } /// public List GetAll(FilterDefinition condition, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return GetAll(condition, null, null, cancellationToken); } /// public List GetAll(FilterDefinition condition, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return GetAll(condition, null, partitionKey, CancellationToken.None); } /// public List GetAll(FilterDefinition condition, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return GetAll(condition, null, partitionKey, cancellationToken); } /// public List GetAll(FilterDefinition condition, FindOptions findOption) where TDocument : IDocument where TKey : IEquatable { return GetAll(condition, findOption, null, CancellationToken.None); } /// public List GetAll(FilterDefinition condition, FindOptions findOption, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return GetAll(condition, findOption, null, cancellationToken); } /// public List GetAll(FilterDefinition condition, FindOptions findOption, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return GetAll(condition, findOption, partitionKey, CancellationToken.None); } /// public List GetAll( FilterDefinition condition, FindOptions findOption, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return MongoDbReader.GetAll(condition, findOption, partitionKey, cancellationToken); } /// public virtual async Task> GetAllAsync(Expression> filter) where TDocument : IDocument where TKey : IEquatable { return await GetAllAsync(filter, null, CancellationToken.None); } /// public virtual async Task> GetAllAsync(Expression> filter, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return await GetAllAsync(filter, null, cancellationToken); } /// public virtual async Task> GetAllAsync(Expression> filter, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return await GetAllAsync(filter, partitionKey, CancellationToken.None); } /// public virtual async Task> GetAllAsync( Expression> filter, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return await MongoDbReader.GetAllAsync(filter, partitionKey, cancellationToken); } /// public virtual List GetAll(Expression> filter) where TDocument : IDocument where TKey : IEquatable { return GetAll(filter, null, CancellationToken.None); } /// public virtual List GetAll(Expression> filter, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return GetAll(filter, null, cancellationToken); } /// public virtual List GetAll(Expression> filter, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return GetAll(filter, partitionKey, CancellationToken.None); } /// public virtual List GetAll( Expression> filter, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return MongoDbReader.GetAll(filter, partitionKey, cancellationToken); } /// public Task CountAsync(FilterDefinition condition) where TDocument : IDocument where TKey : IEquatable { return CountAsync(condition, null, null, CancellationToken.None); } /// public Task CountAsync(FilterDefinition condition, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return CountAsync(condition, null, null, cancellationToken); } /// public Task CountAsync(FilterDefinition condition, CountOptions countOption) where TDocument : IDocument where TKey : IEquatable { return CountAsync(condition, countOption, null, CancellationToken.None); } /// public Task CountAsync(FilterDefinition condition, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return CountAsync(condition, null, partitionKey, CancellationToken.None); } /// public Task CountAsync(FilterDefinition condition, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return CountAsync(condition, null, partitionKey, cancellationToken); } /// public Task CountAsync(FilterDefinition condition, CountOptions countOption, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return CountAsync(condition, countOption, null, cancellationToken); } /// public Task CountAsync(FilterDefinition condition, CountOptions countOption, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return CountAsync(condition, countOption, partitionKey, CancellationToken.None); } /// public Task CountAsync( FilterDefinition condition, CountOptions countOption, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return MongoDbReader.CountAsync(condition, countOption, partitionKey, cancellationToken); } /// public long Count(FilterDefinition condition) where TDocument : IDocument where TKey : IEquatable { return Count(condition, null, null, CancellationToken.None); } /// public long Count(FilterDefinition condition, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return Count(condition, null, null, cancellationToken); } /// public long Count(FilterDefinition condition, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return Count(condition, null, partitionKey, CancellationToken.None); } /// public long Count(FilterDefinition condition, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return Count(condition, null, partitionKey, cancellationToken); } /// public long Count(FilterDefinition condition, CountOptions countOption) where TDocument : IDocument where TKey : IEquatable { return Count(condition, countOption, null, CancellationToken.None); } /// public long Count(FilterDefinition condition, CountOptions countOption, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return Count(condition, countOption, null, cancellationToken); } /// public long Count(FilterDefinition condition, CountOptions countOption, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return Count(condition, countOption, partitionKey, CancellationToken.None); } /// public long Count( FilterDefinition condition, CountOptions countOption, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return MongoDbReader.Count(condition, countOption, partitionKey, cancellationToken); } /// public virtual async Task CountAsync(Expression> filter) where TDocument : IDocument where TKey : IEquatable { return await CountAsync(filter, null, CancellationToken.None); } /// public virtual async Task CountAsync(Expression> filter, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return await CountAsync(filter, null, cancellationToken); } /// public virtual async Task CountAsync(Expression> filter, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return await CountAsync(filter, partitionKey, CancellationToken.None); } /// public virtual async Task CountAsync( Expression> filter, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return await MongoDbReader.CountAsync(filter, partitionKey, cancellationToken); } /// public virtual long Count(Expression> filter) where TDocument : IDocument where TKey : IEquatable { return Count(filter, null, CancellationToken.None); } /// public virtual long Count(Expression> filter, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return Count(filter, null, cancellationToken); } /// public virtual long Count(Expression> filter, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return Count(filter, partitionKey, CancellationToken.None); } /// public virtual long Count(Expression> filter, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return MongoDbReader.Count(filter, partitionKey, cancellationToken); } /// public virtual async Task GetByMaxAsync( Expression> filter, Expression> maxValueSelector) where TDocument : IDocument where TKey : IEquatable { return await GetByMaxAsync(filter, maxValueSelector, null, CancellationToken.None); } /// public virtual async Task GetByMaxAsync( Expression> filter, Expression> maxValueSelector, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return await GetByMaxAsync(filter, maxValueSelector, null, cancellationToken); } /// public virtual async Task GetByMaxAsync( Expression> filter, Expression> maxValueSelector, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return await GetByMaxAsync(filter, maxValueSelector, partitionKey, CancellationToken.None); } /// public virtual async Task GetByMaxAsync( Expression> filter, Expression> maxValueSelector, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return await MongoDbReader.GetByMaxAsync(filter, maxValueSelector, partitionKey, cancellationToken); } /// public virtual TDocument GetByMax(Expression> filter, Expression> maxValueSelector) where TDocument : IDocument where TKey : IEquatable { return GetByMax(filter, maxValueSelector, null, CancellationToken.None); } /// public virtual TDocument GetByMax( Expression> filter, Expression> maxValueSelector, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return GetByMax(filter, maxValueSelector, null, cancellationToken); } /// public virtual TDocument GetByMax( Expression> filter, Expression> maxValueSelector, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return GetByMax(filter, maxValueSelector, partitionKey, CancellationToken.None); } /// public virtual TDocument GetByMax( Expression> filter, Expression> maxValueSelector, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return MongoDbReader.GetByMax(filter, maxValueSelector, partitionKey, cancellationToken); } /// public virtual async Task GetByMinAsync( Expression> filter, Expression> minValueSelector) where TDocument : IDocument where TKey : IEquatable { return await GetByMinAsync(filter, minValueSelector, null, CancellationToken.None); } /// public virtual async Task GetByMinAsync( Expression> filter, Expression> minValueSelector, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return await GetByMinAsync(filter, minValueSelector, null, cancellationToken); } /// public virtual async Task GetByMinAsync( Expression> filter, Expression> minValueSelector, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return await GetByMinAsync(filter, minValueSelector, partitionKey, CancellationToken.None); } /// public virtual async Task GetByMinAsync( Expression> filter, Expression> minValueSelector, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return await MongoDbReader.GetByMinAsync(filter, minValueSelector, partitionKey, cancellationToken); } /// public virtual TDocument GetByMin(Expression> filter, Expression> minValueSelector) where TDocument : IDocument where TKey : IEquatable { return GetByMin(filter, minValueSelector, null, CancellationToken.None); } /// public virtual TDocument GetByMin( Expression> filter, Expression> minValueSelector, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return GetByMin(filter, minValueSelector, null, cancellationToken); } /// public virtual TDocument GetByMin( Expression> filter, Expression> minValueSelector, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return GetByMin(filter, minValueSelector, partitionKey, CancellationToken.None); } /// public virtual TDocument GetByMin( Expression> filter, Expression> minValueSelector, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return MongoDbReader.GetByMin(filter, minValueSelector, partitionKey, cancellationToken); } /// public virtual async Task GetMaxValueAsync( Expression> filter, Expression> maxValueSelector) where TDocument : IDocument where TKey : IEquatable { return await GetMaxValueAsync(filter, maxValueSelector, null, CancellationToken.None); } /// public virtual async Task GetMaxValueAsync( Expression> filter, Expression> maxValueSelector, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return await GetMaxValueAsync(filter, maxValueSelector, null, cancellationToken); } /// public virtual async Task GetMaxValueAsync( Expression> filter, Expression> maxValueSelector, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return await GetMaxValueAsync(filter, maxValueSelector, partitionKey, CancellationToken.None); } /// public virtual async Task GetMaxValueAsync( Expression> filter, Expression> maxValueSelector, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return await MongoDbReader.GetMaxValueAsync(filter, maxValueSelector, partitionKey, cancellationToken); } /// public virtual TValue GetMaxValue( Expression> filter, Expression> maxValueSelector) where TDocument : IDocument where TKey : IEquatable { return GetMaxValue(filter, maxValueSelector, null, CancellationToken.None); } /// public virtual TValue GetMaxValue( Expression> filter, Expression> maxValueSelector, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return GetMaxValue(filter, maxValueSelector, null, cancellationToken); } /// public virtual TValue GetMaxValue( Expression> filter, Expression> maxValueSelector, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return GetMaxValue(filter, maxValueSelector, partitionKey, CancellationToken.None); } /// public virtual TValue GetMaxValue( Expression> filter, Expression> maxValueSelector, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return MongoDbReader.GetMaxValue(filter, maxValueSelector, partitionKey, cancellationToken); } /// public virtual async Task GetMinValueAsync( Expression> filter, Expression> minValueSelector) where TDocument : IDocument where TKey : IEquatable { return await GetMinValueAsync(filter, minValueSelector, null, CancellationToken.None); } /// public virtual async Task GetMinValueAsync( Expression> filter, Expression> minValueSelector, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return await GetMinValueAsync(filter, minValueSelector, null, cancellationToken); } /// public virtual async Task GetMinValueAsync( Expression> filter, Expression> minValueSelector, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return await GetMinValueAsync(filter, minValueSelector, partitionKey, CancellationToken.None); } /// public virtual async Task GetMinValueAsync( Expression> filter, Expression> minValueSelector, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return await MongoDbReader.GetMinValueAsync(filter, minValueSelector, partitionKey, cancellationToken); } /// public virtual TValue GetMinValue( Expression> filter, Expression> minValueSelector) where TDocument : IDocument where TKey : IEquatable { return GetMinValue(filter, minValueSelector, null, CancellationToken.None); } /// public virtual TValue GetMinValue( Expression> filter, Expression> minValueSelector, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return GetMinValue(filter, minValueSelector, null, cancellationToken); } /// public virtual TValue GetMinValue( Expression> filter, Expression> minValueSelector, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return GetMinValue(filter, minValueSelector, partitionKey, CancellationToken.None); } /// public virtual TValue GetMinValue( Expression> filter, Expression> minValueSelector, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return MongoDbReader.GetMinValue(filter, minValueSelector, partitionKey, cancellationToken); } #endregion #region Sum TKey /// public virtual async Task SumByAsync(Expression> filter, Expression> selector) where TDocument : IDocument where TKey : IEquatable { return await SumByAsync(filter, selector, null, CancellationToken.None); } /// public virtual async Task SumByAsync( Expression> filter, Expression> selector, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return await SumByAsync(filter, selector, null, cancellationToken); } /// public virtual async Task SumByAsync( Expression> filter, Expression> selector, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return await SumByAsync(filter, selector, partitionKey, CancellationToken.None); } /// public virtual async Task SumByAsync( Expression> filter, Expression> selector, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return await MongoDbReader.SumByAsync(filter, selector, partitionKey, cancellationToken); } /// public virtual int SumBy( Expression> filter, Expression> selector, string partitionKey = null) where TDocument : IDocument where TKey : IEquatable { return MongoDbReader.SumBy(filter, selector, partitionKey); } /// public virtual async Task SumByAsync(Expression> filter, Expression> selector) where TDocument : IDocument where TKey : IEquatable { return await SumByAsync(filter, selector, null, CancellationToken.None); } /// public virtual async Task SumByAsync( Expression> filter, Expression> selector, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return await SumByAsync(filter, selector, null, cancellationToken); } /// public virtual async Task SumByAsync( Expression> filter, Expression> selector, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return await SumByAsync(filter, selector, partitionKey, CancellationToken.None); } /// public virtual async Task SumByAsync( Expression> filter, Expression> selector, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return await MongoDbReader.SumByAsync(filter, selector, partitionKey, cancellationToken); } /// public virtual decimal SumBy( Expression> filter, Expression> selector, string partitionKey = null) where TDocument : IDocument where TKey : IEquatable { return MongoDbReader.SumBy(filter, selector, partitionKey); } #endregion Sum TKey #region Project TKey /// public virtual async Task ProjectOneAsync( Expression> filter, Expression> projection) where TDocument : IDocument where TKey : IEquatable where TProjection : class { return await ProjectOneAsync(filter, projection, null, CancellationToken.None); } /// public virtual async Task ProjectOneAsync( Expression> filter, Expression> projection, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable where TProjection : class { return await ProjectOneAsync(filter, projection, null, cancellationToken); } /// public virtual async Task ProjectOneAsync( Expression> filter, Expression> projection, string partitionKey) where TDocument : IDocument where TKey : IEquatable where TProjection : class { return await ProjectOneAsync(filter, projection, partitionKey, CancellationToken.None); } /// public virtual async Task ProjectOneAsync( Expression> filter, Expression> projection, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable where TProjection : class { return await MongoDbReader.ProjectOneAsync(filter, projection, partitionKey, cancellationToken); } /// public virtual TProjection ProjectOne( Expression> filter, Expression> projection) where TDocument : IDocument where TKey : IEquatable where TProjection : class { return ProjectOne(filter, projection, null, CancellationToken.None); } /// public virtual TProjection ProjectOne( Expression> filter, Expression> projection, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable where TProjection : class { return ProjectOne(filter, projection, null, cancellationToken); } /// public virtual TProjection ProjectOne( Expression> filter, Expression> projection, string partitionKey) where TDocument : IDocument where TKey : IEquatable where TProjection : class { return ProjectOne(filter, projection, partitionKey, CancellationToken.None); } /// public virtual TProjection ProjectOne( Expression> filter, Expression> projection, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable where TProjection : class { return MongoDbReader.ProjectOne(filter, projection, partitionKey, cancellationToken); } /// public virtual async Task> ProjectManyAsync( Expression> filter, Expression> projection) where TDocument : IDocument where TKey : IEquatable where TProjection : class { return await ProjectManyAsync(filter, projection, null, CancellationToken.None); } /// public virtual async Task> ProjectManyAsync( Expression> filter, Expression> projection, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable where TProjection : class { return await ProjectManyAsync(filter, projection, null, cancellationToken); } /// public virtual async Task> ProjectManyAsync( Expression> filter, Expression> projection, string partitionKey) where TDocument : IDocument where TKey : IEquatable where TProjection : class { return await ProjectManyAsync(filter, projection, partitionKey, CancellationToken.None); } /// public virtual async Task> ProjectManyAsync( Expression> filter, Expression> projection, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable where TProjection : class { return await MongoDbReader.ProjectManyAsync(filter, projection, partitionKey, cancellationToken); } /// public virtual List ProjectMany( Expression> filter, Expression> projection) where TDocument : IDocument where TKey : IEquatable where TProjection : class { return ProjectMany(filter, projection, null, CancellationToken.None); } /// public virtual List ProjectMany( Expression> filter, Expression> projection, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable where TProjection : class { return ProjectMany(filter, projection, null, cancellationToken); } /// public virtual List ProjectMany( Expression> filter, Expression> projection, string partitionKey) where TDocument : IDocument where TKey : IEquatable where TProjection : class { return ProjectMany(filter, projection, partitionKey, CancellationToken.None); } /// public virtual List ProjectMany( Expression> filter, Expression> projection, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable where TProjection : class { return MongoDbReader.ProjectMany(filter, projection, partitionKey, cancellationToken); } #endregion Project TKey #region Group By TKey /// public virtual List GroupBy( Expression> groupingCriteria, Expression, TProjection>> groupProjection) where TDocument : IDocument where TKey : IEquatable where TProjection : class, new() { return GroupBy(groupingCriteria, groupProjection, null, CancellationToken.None); } /// public virtual List GroupBy( Expression> groupingCriteria, Expression, TProjection>> groupProjection, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable where TProjection : class, new() { return GroupBy(groupingCriteria, groupProjection, null, cancellationToken); } /// public virtual List GroupBy( Expression> groupingCriteria, Expression, TProjection>> groupProjection, string partitionKey) where TDocument : IDocument where TKey : IEquatable where TProjection : class, new() { return GroupBy(groupingCriteria, groupProjection, partitionKey, CancellationToken.None); } /// public virtual List GroupBy( Expression> groupingCriteria, Expression, TProjection>> groupProjection, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable where TProjection : class, new() { return MongoDbReader.GroupBy(groupingCriteria, groupProjection, partitionKey, cancellationToken); } /// public virtual List GroupBy( Expression> filter, Expression> groupingCriteria, Expression, TProjection>> groupProjection) where TDocument : IDocument where TKey : IEquatable where TProjection : class, new() { return GroupBy(filter, groupingCriteria, groupProjection, null, CancellationToken.None); } /// public virtual List GroupBy( Expression> filter, Expression> groupingCriteria, Expression, TProjection>> groupProjection, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable where TProjection : class, new() { return GroupBy(filter, groupingCriteria, groupProjection, null, cancellationToken); } /// public virtual List GroupBy( Expression> filter, Expression> groupingCriteria, Expression, TProjection>> groupProjection, string partitionKey) where TDocument : IDocument where TKey : IEquatable where TProjection : class, new() { return GroupBy(filter, groupingCriteria, groupProjection, partitionKey, CancellationToken.None); } /// public virtual List GroupBy( Expression> filter, Expression> groupingCriteria, Expression, TProjection>> groupProjection, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable where TProjection : class, new() { return MongoDbReader.GroupBy(filter, groupingCriteria, groupProjection, partitionKey, cancellationToken); } #endregion Group By TKey #region Pagination /// public virtual async Task> GetSortedPaginatedAsync( Expression> filter, Expression> sortSelector, bool ascending = true, int skipNumber = 0, int takeNumber = 50, string partitionKey = null, CancellationToken cancellationToken = default) where TDocument : IDocument where TKey : IEquatable { var sorting = ascending ? Builders.Sort.Ascending(sortSelector) : Builders.Sort.Descending(sortSelector); return await HandlePartitioned(partitionKey) .Find(filter) .Sort(sorting) .Skip(skipNumber) .Limit(takeNumber) .ToListAsync(cancellationToken); } /// public virtual async Task> GetSortedPaginatedAsync( Expression> filter, SortDefinition sortDefinition, int skipNumber = 0, int takeNumber = 50, string partitionKey = null, CancellationToken cancellationToken = default) where TDocument : IDocument where TKey : IEquatable { return await HandlePartitioned(partitionKey) .Find(filter) .Sort(sortDefinition) .Skip(skipNumber) .Limit(takeNumber) .ToListAsync(cancellationToken); } #endregion Pagination } }