Table of Contents

Class DiskRepositoryCollectionBase<TEntity, TKey>

Namespace
Tharga.MongoDB.Disk
Assembly
Tharga.MongoDB.dll
public abstract class DiskRepositoryCollectionBase<TEntity, TKey> : RepositoryCollectionBase<TEntity, TKey>, IDiskRepositoryCollection<TEntity, TKey>, IRepositoryCollection<TEntity, TKey>, IReadOnlyRepositoryCollection<TEntity, TKey>, IRepositoryCollection, IReadOnlyRepositoryCollection where TEntity : EntityBase<TKey>

Type Parameters

TEntity
TKey
Inheritance
DiskRepositoryCollectionBase<TEntity, TKey>
Implements
IRepositoryCollection<TEntity, TKey>
Derived
Inherited Members

Constructors

DiskRepositoryCollectionBase(IMongoDbServiceFactory, ILogger)

Override this constructor for static collections.

protected DiskRepositoryCollectionBase(IMongoDbServiceFactory mongoDbServiceFactory, ILogger logger = null)

Parameters

mongoDbServiceFactory IMongoDbServiceFactory
logger ILogger

DiskRepositoryCollectionBase(IMongoDbServiceFactory, ILogger, DatabaseContext)

Use this constructor for dynamic collections together with ICollectionProvider.

protected DiskRepositoryCollectionBase(IMongoDbServiceFactory mongoDbServiceFactory, ILogger logger, DatabaseContext databaseContext)

Parameters

mongoDbServiceFactory IMongoDbServiceFactory
logger ILogger
databaseContext DatabaseContext

Properties

FetchSize

public override int? FetchSize { get; }

Property Value

int?

Methods

AddAsync(TEntity, IClientSessionHandle)

public override Task AddAsync(TEntity entity, IClientSessionHandle session = null)

Parameters

entity TEntity
session IClientSessionHandle

Returns

Task

AddManyAsync(IEnumerable<TEntity>, IClientSessionHandle)

public override Task AddManyAsync(IEnumerable<TEntity> entities, IClientSessionHandle session = null)

Parameters

entities IEnumerable<TEntity>
session IClientSessionHandle

Returns

Task

AddOrReplaceAsync(TEntity, IClientSessionHandle)

public virtual Task<EntityChangeResult<TEntity>> AddOrReplaceAsync(TEntity entity, IClientSessionHandle session = null)

Parameters

entity TEntity
session IClientSessionHandle

Returns

Task<EntityChangeResult<TEntity>>

AvgAsync(Expression<Func<TEntity, decimal>>, Expression<Func<TEntity, bool>>, CancellationToken)

Computes the average of a numeric field server-side.

public override Task<decimal> AvgAsync(Expression<Func<TEntity, decimal>> field, Expression<Func<TEntity, bool>> predicate = null, CancellationToken cancellationToken = default)

Parameters

field Expression<Func<TEntity, decimal>>
predicate Expression<Func<TEntity, bool>>
cancellationToken CancellationToken

Returns

Task<decimal>

CountAsync(FilterDefinition<TEntity>, CancellationToken)

public override Task<long> CountAsync(FilterDefinition<TEntity> filter, CancellationToken cancellationToken = default)

Parameters

filter FilterDefinition<TEntity>
cancellationToken CancellationToken

Returns

Task<long>

CountAsync(Expression<Func<TEntity, bool>>, CancellationToken)

public override Task<long> CountAsync(Expression<Func<TEntity, bool>> predicate, CancellationToken cancellationToken = default)

Parameters

predicate Expression<Func<TEntity, bool>>
cancellationToken CancellationToken

Returns

Task<long>

DeleteManyAsync(FilterDefinition<TEntity>, IClientSessionHandle)

public Task<long> DeleteManyAsync(FilterDefinition<TEntity> filter, IClientSessionHandle session = null)

Parameters

filter FilterDefinition<TEntity>
session IClientSessionHandle

Returns

Task<long>

DeleteManyAsync(Expression<Func<TEntity, bool>>, IClientSessionHandle)

public Task<long> DeleteManyAsync(Expression<Func<TEntity, bool>> predicate = null, IClientSessionHandle session = null)

Parameters

predicate Expression<Func<TEntity, bool>>
session IClientSessionHandle

Returns

Task<long>

DeleteOneAsync(FilterDefinition<TEntity>, OneOption<TEntity>, IClientSessionHandle)

public Task<TEntity> DeleteOneAsync(FilterDefinition<TEntity> filter, OneOption<TEntity> options = null, IClientSessionHandle session = null)

Parameters

filter FilterDefinition<TEntity>
options OneOption<TEntity>
session IClientSessionHandle

Returns

Task<TEntity>

DeleteOneAsync(Expression<Func<TEntity, bool>>, OneOption<TEntity>, IClientSessionHandle)

public Task<TEntity> DeleteOneAsync(Expression<Func<TEntity, bool>> predicate, OneOption<TEntity> options = null, IClientSessionHandle session = null)

Parameters

predicate Expression<Func<TEntity, bool>>
options OneOption<TEntity>
session IClientSessionHandle

Returns

Task<TEntity>

DeleteOneAsync(TKey, IClientSessionHandle)

public override Task<TEntity> DeleteOneAsync(TKey id, IClientSessionHandle session = null)

Parameters

id TKey
session IClientSessionHandle

Returns

Task<TEntity>

DropCollectionAsync()

public override Task DropCollectionAsync()

Returns

Task

DropEmptyAsync(IMongoCollection<TEntity>)

protected virtual Task DropEmptyAsync(IMongoCollection<TEntity> collection)

Parameters

collection IMongoCollection<TEntity>

Returns

Task

EstimatedCountAsync(CancellationToken)

Returns an estimated count of documents in the collection using metadata. This is very fast but may not be perfectly accurate.

public override Task<long> EstimatedCountAsync(CancellationToken cancellationToken = default)

Parameters

cancellationToken CancellationToken

Returns

Task<long>

ExecuteAsync<T>(Func<IMongoCollection<TEntity>, CancellationToken, Task<T>>, Operation, CancellationToken)

public override Task<T> ExecuteAsync<T>(Func<IMongoCollection<TEntity>, CancellationToken, Task<T>> execute, Operation operation, CancellationToken cancellationToken)

Parameters

execute Func<IMongoCollection<TEntity>, CancellationToken, Task<T>>
operation Operation
cancellationToken CancellationToken

Returns

Task<T>

Type Parameters

T

ExecuteAsync<T>(Func<IMongoCollection<TEntity>, Task<T>>, Operation)

public override Task<T> ExecuteAsync<T>(Func<IMongoCollection<TEntity>, Task<T>> execute, Operation operation)

Parameters

execute Func<IMongoCollection<TEntity>, Task<T>>
operation Operation

Returns

Task<T>

Type Parameters

T

ExecuteAsync<T>(string, Func<IMongoCollection<TEntity>, IClientSessionHandle, CancellationToken, Task<(T Data, int Count)>>, Operation, CancellationToken, FilterDefinition<TEntity>, IClientSessionHandle)

protected Task<T> ExecuteAsync<T>(string functionName, Func<IMongoCollection<TEntity>, IClientSessionHandle, CancellationToken, Task<(T Data, int Count)>> action, Operation operation, CancellationToken cancellationToken = default, FilterDefinition<TEntity> filter = null, IClientSessionHandle session = null)

Parameters

functionName string
action Func<IMongoCollection<TEntity>, IClientSessionHandle, CancellationToken, Task<(T Data, int Count)>>
operation Operation
cancellationToken CancellationToken
filter FilterDefinition<TEntity>
session IClientSessionHandle

Returns

Task<T>

Type Parameters

T

ExecuteManyAsync<T>(Func<IMongoCollection<TEntity>, CancellationToken, Task<IAsyncCursor<T>>>, CancellationToken)

public override IAsyncEnumerable<T> ExecuteManyAsync<T>(Func<IMongoCollection<TEntity>, CancellationToken, Task<IAsyncCursor<T>>> queryFactory, CancellationToken cancellationToken = default)

Parameters

queryFactory Func<IMongoCollection<TEntity>, CancellationToken, Task<IAsyncCursor<T>>>
cancellationToken CancellationToken

Returns

IAsyncEnumerable<T>

Type Parameters

T

GetAsync(FilterDefinition<TEntity>, Options<TEntity>, CancellationToken)

public override IAsyncEnumerable<TEntity> GetAsync(FilterDefinition<TEntity> filter, Options<TEntity> options = null, CancellationToken cancellationToken = default)

Parameters

filter FilterDefinition<TEntity>
options Options<TEntity>
cancellationToken CancellationToken

Returns

IAsyncEnumerable<TEntity>

GetAsync(Expression<Func<TEntity, bool>>, Options<TEntity>, CancellationToken)

public override IAsyncEnumerable<TEntity> GetAsync(Expression<Func<TEntity, bool>> predicate = null, Options<TEntity> options = null, CancellationToken cancellationToken = default)

Parameters

predicate Expression<Func<TEntity, bool>>
options Options<TEntity>
cancellationToken CancellationToken

Returns

IAsyncEnumerable<TEntity>

GetCollection()

[Obsolete("Use ExecuteAsync instead. This method will be deprecated.")]
public virtual IMongoCollection<TEntity> GetCollection()

Returns

IMongoCollection<TEntity>

GetDirtyAsync()

Entities that needs cleaning.

public override IAsyncEnumerable<TEntity> GetDirtyAsync()

Returns

IAsyncEnumerable<TEntity>

GetFailedIndices()

Indices that have failed to be created or dropped on this collection within the current process, with the most recent error message captured for each. Empty when no failures have been recorded. In-process scope; cross-process persistence is a planned follow-up.

public override IReadOnlyList<IndexFailure> GetFailedIndices()

Returns

IReadOnlyList<IndexFailure>

GetManyAsync(FilterDefinition<TEntity>, Options<TEntity>, CancellationToken)

public override Task<Result<TEntity, TKey>> GetManyAsync(FilterDefinition<TEntity> filter, Options<TEntity> options = null, CancellationToken cancellationToken = default)

Parameters

filter FilterDefinition<TEntity>
options Options<TEntity>
cancellationToken CancellationToken

Returns

Task<Result<TEntity, TKey>>

GetManyAsync(Expression<Func<TEntity, bool>>, Options<TEntity>, CancellationToken)

public override Task<Result<TEntity, TKey>> GetManyAsync(Expression<Func<TEntity, bool>> predicate = null, Options<TEntity> options = null, CancellationToken cancellationToken = default)

Parameters

predicate Expression<Func<TEntity, bool>>
options Options<TEntity>
cancellationToken CancellationToken

Returns

Task<Result<TEntity, TKey>>

GetManyProjectionAsync<T>(FilterDefinition<TEntity>, Options<TEntity>, CancellationToken)

public override Task<Result<T>> GetManyProjectionAsync<T>(FilterDefinition<TEntity> filter, Options<TEntity> options = null, CancellationToken cancellationToken = default)

Parameters

filter FilterDefinition<TEntity>
options Options<TEntity>
cancellationToken CancellationToken

Returns

Task<Result<T>>

Type Parameters

T

GetManyProjectionAsync<T>(Expression<Func<TEntity, bool>>, Options<TEntity>, CancellationToken)

public override Task<Result<T>> GetManyProjectionAsync<T>(Expression<Func<TEntity, bool>> predicate = null, Options<TEntity> options = null, CancellationToken cancellationToken = default)

Parameters

predicate Expression<Func<TEntity, bool>>
options Options<TEntity>
cancellationToken CancellationToken

Returns

Task<Result<T>>

Type Parameters

T

GetOneAsync(FilterDefinition<TEntity>, OneOption<TEntity>, CancellationToken)

public override Task<TEntity> GetOneAsync(FilterDefinition<TEntity> filter, OneOption<TEntity> options = null, CancellationToken cancellationToken = default)

Parameters

filter FilterDefinition<TEntity>
options OneOption<TEntity>
cancellationToken CancellationToken

Returns

Task<TEntity>

GetOneAsync(Expression<Func<TEntity, bool>>, OneOption<TEntity>, CancellationToken)

public override Task<TEntity> GetOneAsync(Expression<Func<TEntity, bool>> predicate, OneOption<TEntity> options = null, CancellationToken cancellationToken = default)

Parameters

predicate Expression<Func<TEntity, bool>>
options OneOption<TEntity>
cancellationToken CancellationToken

Returns

Task<TEntity>

GetOneAsync(TKey, CancellationToken)

public override Task<TEntity> GetOneAsync(TKey id, CancellationToken cancellationToken = default)

Parameters

id TKey
cancellationToken CancellationToken

Returns

Task<TEntity>

GetPageAsync(int, PagePosition, Expression<Func<TEntity, bool>>, Expression<Func<TEntity, object>>, bool, CancellationToken)

Keyset (seek-based) pagination. Cost is O(log N) per page regardless of how deep the page sits — no skip penalty on deep pages or "jump to last." Single-column sort only; total count is intentionally not part of the result and should be obtained via CountAsync(predicate) separately.

public override Task<CursorPage<TEntity>> GetPageAsync(int pageSize, PagePosition position, Expression<Func<TEntity, bool>> predicate = null, Expression<Func<TEntity, object>> sortBy = null, bool ascending = true, CancellationToken cancellationToken = default)

Parameters

pageSize int
position PagePosition
predicate Expression<Func<TEntity, bool>>
sortBy Expression<Func<TEntity, object>>
ascending bool
cancellationToken CancellationToken

Returns

Task<CursorPage<TEntity>>

GetPageProjectionAsync<T>(int, PagePosition, Expression<Func<TEntity, T>>, Expression<Func<TEntity, bool>>, Expression<Func<TEntity, object>>, bool, CancellationToken)

public override Task<CursorPage<T>> GetPageProjectionAsync<T>(int pageSize, PagePosition position, Expression<Func<TEntity, T>> projection, Expression<Func<TEntity, bool>> predicate = null, Expression<Func<TEntity, object>> sortBy = null, bool ascending = true, CancellationToken cancellationToken = default)

Parameters

pageSize int
position PagePosition
projection Expression<Func<TEntity, T>>
predicate Expression<Func<TEntity, bool>>
sortBy Expression<Func<TEntity, object>>
ascending bool
cancellationToken CancellationToken

Returns

Task<CursorPage<T>>

Type Parameters

T

GetProjectionAsync<T>(FilterDefinition<TEntity>, Options<TEntity>, CancellationToken)

public override IAsyncEnumerable<T> GetProjectionAsync<T>(FilterDefinition<TEntity> filter, Options<TEntity> options = null, CancellationToken cancellationToken = default)

Parameters

filter FilterDefinition<TEntity>
options Options<TEntity>
cancellationToken CancellationToken

Returns

IAsyncEnumerable<T>

Type Parameters

T

GetProjectionAsync<T>(Expression<Func<TEntity, bool>>, Options<TEntity>, CancellationToken)

public override IAsyncEnumerable<T> GetProjectionAsync<T>(Expression<Func<TEntity, bool>> predicate = null, Options<TEntity> options = null, CancellationToken cancellationToken = default)

Parameters

predicate Expression<Func<TEntity, bool>>
options Options<TEntity>
cancellationToken CancellationToken

Returns

IAsyncEnumerable<T>

Type Parameters

T

GetSizeAsync(CancellationToken)

public override Task<long> GetSizeAsync(CancellationToken cancellationToken = default)

Parameters

cancellationToken CancellationToken

Returns

Task<long>

MaxAsync<TField>(Expression<Func<TEntity, TField>>, Expression<Func<TEntity, bool>>, CancellationToken)

Computes the maximum value of a field server-side.

public override Task<TField> MaxAsync<TField>(Expression<Func<TEntity, TField>> field, Expression<Func<TEntity, bool>> predicate = null, CancellationToken cancellationToken = default)

Parameters

field Expression<Func<TEntity, TField>>
predicate Expression<Func<TEntity, bool>>
cancellationToken CancellationToken

Returns

Task<TField>

Type Parameters

TField

MinAsync<TField>(Expression<Func<TEntity, TField>>, Expression<Func<TEntity, bool>>, CancellationToken)

Computes the minimum value of a field server-side.

public override Task<TField> MinAsync<TField>(Expression<Func<TEntity, TField>> field, Expression<Func<TEntity, bool>> predicate = null, CancellationToken cancellationToken = default)

Parameters

field Expression<Func<TEntity, TField>>
predicate Expression<Func<TEntity, bool>>
cancellationToken CancellationToken

Returns

Task<TField>

Type Parameters

TField

QueryAsync(FilterDefinition<TEntity>, Options<TEntity>, CancellationToken)

[Obsolete("Use GetManyAsync instead. This method will be deprecated.")]
public virtual Task<Result<TEntity, TKey>> QueryAsync(FilterDefinition<TEntity> filter, Options<TEntity> options = null, CancellationToken cancellationToken = default)

Parameters

filter FilterDefinition<TEntity>
options Options<TEntity>
cancellationToken CancellationToken

Returns

Task<Result<TEntity, TKey>>

QueryAsync(Expression<Func<TEntity, bool>>, Options<TEntity>, CancellationToken)

[Obsolete("Use GetManyAsync instead. This method will be deprecated.")]
public virtual Task<Result<TEntity, TKey>> QueryAsync(Expression<Func<TEntity, bool>> predicate = null, Options<TEntity> options = null, CancellationToken cancellationToken = default)

Parameters

predicate Expression<Func<TEntity, bool>>
options Options<TEntity>
cancellationToken CancellationToken

Returns

Task<Result<TEntity, TKey>>

ReplaceOneAsync(TEntity, FilterDefinition<TEntity>, OneOption<TEntity>, IClientSessionHandle)

public virtual Task<EntityChangeResult<TEntity>> ReplaceOneAsync(TEntity entity, FilterDefinition<TEntity> filter, OneOption<TEntity> options = null, IClientSessionHandle session = null)

Parameters

entity TEntity
filter FilterDefinition<TEntity>
options OneOption<TEntity>
session IClientSessionHandle

Returns

Task<EntityChangeResult<TEntity>>

ReplaceOneAsync(TEntity, OneOption<TEntity>, IClientSessionHandle)

public virtual Task<EntityChangeResult<TEntity>> ReplaceOneAsync(TEntity entity, OneOption<TEntity> options = null, IClientSessionHandle session = null)

Parameters

entity TEntity
options OneOption<TEntity>
session IClientSessionHandle

Returns

Task<EntityChangeResult<TEntity>>

SumAsync(Expression<Func<TEntity, decimal>>, Expression<Func<TEntity, bool>>, CancellationToken)

Computes the sum of a numeric field server-side.

public override Task<decimal> SumAsync(Expression<Func<TEntity, decimal>> field, Expression<Func<TEntity, bool>> predicate = null, CancellationToken cancellationToken = default)

Parameters

field Expression<Func<TEntity, decimal>>
predicate Expression<Func<TEntity, bool>>
cancellationToken CancellationToken

Returns

Task<decimal>

TryAddAsync(TEntity, IClientSessionHandle)

public override Task<bool> TryAddAsync(TEntity entity, IClientSessionHandle session = null)

Parameters

entity TEntity
session IClientSessionHandle

Returns

Task<bool>

UpdateManyAsync(FilterDefinition<TEntity>, UpdateDefinition<TEntity>, IClientSessionHandle)

public Task<long> UpdateManyAsync(FilterDefinition<TEntity> filter, UpdateDefinition<TEntity> update, IClientSessionHandle session = null)

Parameters

filter FilterDefinition<TEntity>
update UpdateDefinition<TEntity>
session IClientSessionHandle

Returns

Task<long>

UpdateManyAsync(Expression<Func<TEntity, bool>>, UpdateDefinition<TEntity>, IClientSessionHandle)

public virtual Task<long> UpdateManyAsync(Expression<Func<TEntity, bool>> predicate, UpdateDefinition<TEntity> update, IClientSessionHandle session = null)

Parameters

predicate Expression<Func<TEntity, bool>>
update UpdateDefinition<TEntity>
session IClientSessionHandle

Returns

Task<long>

UpdateOneAsync(FilterDefinition<TEntity>, UpdateDefinition<TEntity>, OneOption<TEntity>, IClientSessionHandle)

public virtual Task<EntityChangeResult<TEntity>> UpdateOneAsync(FilterDefinition<TEntity> filter, UpdateDefinition<TEntity> update, OneOption<TEntity> options = null, IClientSessionHandle session = null)

Parameters

filter FilterDefinition<TEntity>
update UpdateDefinition<TEntity>
options OneOption<TEntity>
session IClientSessionHandle

Returns

Task<EntityChangeResult<TEntity>>

UpdateOneAsync(Expression<Func<TEntity, bool>>, UpdateDefinition<TEntity>, OneOption<TEntity>, IClientSessionHandle)

public virtual Task<EntityChangeResult<TEntity>> UpdateOneAsync(Expression<Func<TEntity, bool>> predicate, UpdateDefinition<TEntity> update, OneOption<TEntity> options = null, IClientSessionHandle session = null)

Parameters

predicate Expression<Func<TEntity, bool>>
update UpdateDefinition<TEntity>
options OneOption<TEntity>
session IClientSessionHandle

Returns

Task<EntityChangeResult<TEntity>>

UpdateOneAsync(TKey, UpdateDefinition<TEntity>, IClientSessionHandle)

public virtual Task<EntityChangeResult<TEntity>> UpdateOneAsync(TKey id, UpdateDefinition<TEntity> update, IClientSessionHandle session = null)

Parameters

id TKey
update UpdateDefinition<TEntity>
session IClientSessionHandle

Returns

Task<EntityChangeResult<TEntity>>