interfaces to seperate files
This commit is contained in:
@@ -1,13 +1,13 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>netcoreapp2.1</TargetFramework>
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Identity" Version="2.1.2" />
|
<PackageReference Include="Microsoft.AspNetCore.Identity" Version="2.1.2" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Identity.Stores" Version="2.1.2" />
|
<PackageReference Include="Microsoft.Extensions.Identity.Stores" Version="2.1.2" />
|
||||||
<PackageReference Include="MongoDB.Driver" Version="2.13.2" />
|
<PackageReference Include="MongoDB.Driver" Version="2.15.0" />
|
||||||
<PackageReference Include="xunit" Version="2.4.1" />
|
<PackageReference Include="xunit" Version="2.4.1" />
|
||||||
<PackageReference Include="xunit.runner.console" Version="2.4.1">
|
<PackageReference Include="xunit.runner.console" Version="2.4.1">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
|
||||||
|
<IsPackable>false</IsPackable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0"/>
|
||||||
|
<PackageReference Include="xunit" Version="2.4.1"/>
|
||||||
|
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
|
||||||
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
|
<PrivateAssets>all</PrivateAssets>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="coverlet.collector" Version="3.1.0">
|
||||||
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
|
<PrivateAssets>all</PrivateAssets>
|
||||||
|
</PackageReference>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace CoreUnitTests;
|
||||||
|
|
||||||
|
public class UnitTest1
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Test1()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -9,6 +9,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MongoDbGenericRepository",
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CoreIntegrationTests", "CoreIntegrationTests\CoreIntegrationTests.csproj", "{C640C106-7A25-4E49-A0CF-E4F248E5A97F}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CoreIntegrationTests", "CoreIntegrationTests\CoreIntegrationTests.csproj", "{C640C106-7A25-4E49-A0CF-E4F248E5A97F}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CoreUnitTests", "CoreUnitTests\CoreUnitTests.csproj", "{8BE513ED-84F4-47E1-946D-84958CF95E6B}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
@@ -27,6 +29,10 @@ Global
|
|||||||
{C640C106-7A25-4E49-A0CF-E4F248E5A97F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{C640C106-7A25-4E49-A0CF-E4F248E5A97F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{C640C106-7A25-4E49-A0CF-E4F248E5A97F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{C640C106-7A25-4E49-A0CF-E4F248E5A97F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{C640C106-7A25-4E49-A0CF-E4F248E5A97F}.Release|Any CPU.Build.0 = Release|Any CPU
|
{C640C106-7A25-4E49-A0CF-E4F248E5A97F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{8BE513ED-84F4-47E1-946D-84958CF95E6B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{8BE513ED-84F4-47E1-946D-84958CF95E6B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{8BE513ED-84F4-47E1-946D-84958CF95E6B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{8BE513ED-84F4-47E1-946D-84958CF95E6B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|||||||
@@ -7,59 +7,6 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace MongoDbGenericRepository
|
namespace MongoDbGenericRepository
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
/// The IBaseMongoRepository_Create interface to expose document creation functionality
|
|
||||||
/// with document having an Id of type Guid.
|
|
||||||
/// </summary>
|
|
||||||
public interface IBaseMongoRepository_Create : IBaseMongoRepository_Create<Guid>
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Asynchronously adds a document to the collection.
|
|
||||||
/// Populates the Id and AddedAtUtc fields if necessary.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
|
||||||
/// <param name="document">The document you want to add.</param>
|
|
||||||
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
|
||||||
Task AddOneAsync<TDocument, TKey>(TDocument document, CancellationToken cancellationToken = default)
|
|
||||||
where TDocument : IDocument<TKey>
|
|
||||||
where TKey : IEquatable<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Adds a document to the collection.
|
|
||||||
/// Populates the Id and AddedAtUtc fields if necessary.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
|
||||||
/// <param name="document">The document you want to add.</param>
|
|
||||||
void AddOne<TDocument, TKey>(TDocument document)
|
|
||||||
where TDocument : IDocument<TKey>
|
|
||||||
where TKey : IEquatable<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Asynchronously adds a list of documents to the collection.
|
|
||||||
/// Populates the Id and AddedAtUtc fields if necessary.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
|
||||||
/// <param name="documents">The documents you want to add.</param>
|
|
||||||
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
|
||||||
Task AddManyAsync<TDocument, TKey>(IEnumerable<TDocument> documents, CancellationToken cancellationToken = default)
|
|
||||||
where TDocument : IDocument<TKey>
|
|
||||||
where TKey : IEquatable<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Adds a list of documents to the collection.
|
|
||||||
/// Populates the Id and AddedAtUtc fields if necessary.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
|
||||||
/// <param name="documents">The documents you want to add.</param>
|
|
||||||
void AddMany<TDocument, TKey>(IEnumerable<TDocument> documents)
|
|
||||||
where TDocument : IDocument<TKey>
|
|
||||||
where TKey : IEquatable<TKey>;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The base Repository, it is meant to be inherited from by your custom custom MongoRepository implementation.
|
/// 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.
|
/// Its constructor must be given a connection string and a database name.
|
||||||
@@ -67,12 +14,12 @@ namespace MongoDbGenericRepository
|
|||||||
public abstract partial class BaseMongoRepository : IBaseMongoRepository_Create
|
public abstract partial class BaseMongoRepository : IBaseMongoRepository_Create
|
||||||
{
|
{
|
||||||
private readonly object _initLock = new object();
|
private readonly object _initLock = new object();
|
||||||
private MongoDbCreator _mongoDbCreator;
|
private volatile IMongoDbCreator _mongoDbCreator;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The MongoDbCreator field.
|
/// The MongoDbCreator field.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected virtual MongoDbCreator MongoDbCreator
|
protected virtual IMongoDbCreator MongoDbCreator
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -7,105 +7,11 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace MongoDbGenericRepository
|
namespace MongoDbGenericRepository
|
||||||
{
|
{
|
||||||
public interface IBaseMongoRepository_Delete : IBaseMongoRepository_Delete<Guid>
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Deletes a document.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
|
||||||
/// <param name="document">The document you want to delete.</param>
|
|
||||||
/// <returns>The number of documents deleted.</returns>
|
|
||||||
long DeleteOne<TDocument, TKey>(TDocument document)
|
|
||||||
where TDocument : IDocument<TKey>
|
|
||||||
where TKey : IEquatable<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Asynchronously deletes a document matching the condition of the LINQ expression filter.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
|
||||||
/// <param name="document">The document you want to delete.</param>
|
|
||||||
/// <returns>The number of documents deleted.</returns>
|
|
||||||
Task<long> DeleteOneAsync<TDocument, TKey>(TDocument document)
|
|
||||||
where TDocument : IDocument<TKey>
|
|
||||||
where TKey : IEquatable<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Deletes a document matching the condition of the LINQ expression filter.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
|
||||||
/// <param name="filter">A LINQ expression filter.</param>
|
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
|
||||||
/// <returns>The number of documents deleted.</returns>
|
|
||||||
long DeleteOne<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
|
||||||
where TDocument : IDocument<TKey>
|
|
||||||
where TKey : IEquatable<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Asynchronously deletes a document matching the condition of the LINQ expression filter.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
|
||||||
/// <param name="filter">A LINQ expression filter.</param>
|
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
|
||||||
/// <returns>The number of documents deleted.</returns>
|
|
||||||
Task<long> DeleteOneAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
|
||||||
where TDocument : IDocument<TKey>
|
|
||||||
where TKey : IEquatable<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Asynchronously deletes the documents matching the condition of the LINQ expression filter.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
|
||||||
/// <param name="filter">A LINQ expression filter.</param>
|
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
|
||||||
/// <returns>The number of documents deleted.</returns>
|
|
||||||
Task<long> DeleteManyAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
|
||||||
where TDocument : IDocument<TKey>
|
|
||||||
where TKey : IEquatable<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Asynchronously deletes a list of documents.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
|
||||||
/// <param name="documents">The list of documents to delete.</param>
|
|
||||||
/// <returns>The number of documents deleted.</returns>
|
|
||||||
Task<long> DeleteManyAsync<TDocument, TKey>(IEnumerable<TDocument> documents)
|
|
||||||
where TDocument : IDocument<TKey>
|
|
||||||
where TKey : IEquatable<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Deletes a list of documents.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
|
||||||
/// <param name="documents">The list of documents to delete.</param>
|
|
||||||
/// <returns>The number of documents deleted.</returns>
|
|
||||||
long DeleteMany<TDocument, TKey>(IEnumerable<TDocument> documents)
|
|
||||||
where TDocument : IDocument<TKey>
|
|
||||||
where TKey : IEquatable<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Deletes the documents matching the condition of the LINQ expression filter.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
|
||||||
/// <param name="filter">A LINQ expression filter.</param>
|
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
|
||||||
/// <returns>The number of documents deleted.</returns>
|
|
||||||
long DeleteMany<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
|
||||||
where TDocument : IDocument<TKey>
|
|
||||||
where TKey : IEquatable<TKey>;
|
|
||||||
}
|
|
||||||
|
|
||||||
public abstract partial class BaseMongoRepository : IBaseMongoRepository_Delete
|
public abstract partial class BaseMongoRepository : IBaseMongoRepository_Delete
|
||||||
{
|
{
|
||||||
private MongoDbEraser _mongoDbEraser;
|
private volatile IMongoDbEraser _mongoDbEraser;
|
||||||
protected virtual MongoDbEraser MongoDbEraser
|
|
||||||
|
protected virtual IMongoDbEraser MongoDbEraser
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -7,113 +7,15 @@ using MongoDbGenericRepository.Models;
|
|||||||
|
|
||||||
namespace MongoDbGenericRepository
|
namespace MongoDbGenericRepository
|
||||||
{
|
{
|
||||||
public interface IBaseMongoRepository_Index : IBaseMongoRepository_Index<Guid>
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Returns the names of the indexes present on a collection.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
|
||||||
/// <param name="partitionKey">An optional partition key</param>
|
|
||||||
/// <returns>A list containing the names of the indexes on on the concerned collection.</returns>
|
|
||||||
Task<List<string>> GetIndexesNamesAsync<TDocument, TKey>(string partitionKey = null)
|
|
||||||
where TDocument : IDocument<TKey>
|
|
||||||
where TKey : IEquatable<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Create a text index on the given field.
|
|
||||||
/// IndexCreationOptions can be supplied to further specify
|
|
||||||
/// how the creation should be done.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
|
||||||
/// <param name="field">The field we want to index.</param>
|
|
||||||
/// <param name="indexCreationOptions">Options for creating an index.</param>
|
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
|
||||||
/// <returns>The result of the create index operation.</returns>
|
|
||||||
Task<string> CreateTextIndexAsync<TDocument, TKey>(Expression<Func<TDocument, object>> field, IndexCreationOptions indexCreationOptions = null, string partitionKey = null)
|
|
||||||
where TDocument : IDocument<TKey>
|
|
||||||
where TKey : IEquatable<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Creates an index on the given field in ascending order.
|
|
||||||
/// IndexCreationOptions can be supplied to further specify
|
|
||||||
/// how the creation should be done.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
|
||||||
/// <param name="field">The field we want to index.</param>
|
|
||||||
/// <param name="indexCreationOptions">Options for creating an index.</param>
|
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
|
||||||
/// <returns>The result of the create index operation.</returns>
|
|
||||||
Task<string> CreateAscendingIndexAsync<TDocument, TKey>(Expression<Func<TDocument, object>> field, IndexCreationOptions indexCreationOptions = null, string partitionKey = null)
|
|
||||||
where TDocument : IDocument<TKey>
|
|
||||||
where TKey : IEquatable<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Creates an index on the given field in descending order.
|
|
||||||
/// IndexCreationOptions can be supplied to further specify
|
|
||||||
/// how the creation should be done.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
|
||||||
/// <param name="field">The field we want to index.</param>
|
|
||||||
/// <param name="indexCreationOptions">Options for creating an index.</param>
|
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
|
||||||
/// <returns>The result of the create index operation.</returns>
|
|
||||||
Task<string> CreateDescendingIndexAsync<TDocument, TKey>(Expression<Func<TDocument, object>> field, IndexCreationOptions indexCreationOptions = null, string partitionKey = null)
|
|
||||||
where TDocument : IDocument<TKey>
|
|
||||||
where TKey : IEquatable<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Creates a hashed index on the given field.
|
|
||||||
/// IndexCreationOptions can be supplied to further specify
|
|
||||||
/// how the creation should be done.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
|
||||||
/// <param name="field">The field we want to index.</param>
|
|
||||||
/// <param name="indexCreationOptions">Options for creating an index.</param>
|
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
|
||||||
/// <returns>The result of the create index operation.</returns>
|
|
||||||
Task<string> CreateHashedIndexAsync<TDocument, TKey>(Expression<Func<TDocument, object>> field, IndexCreationOptions indexCreationOptions = null, string partitionKey = null)
|
|
||||||
where TDocument : IDocument<TKey>
|
|
||||||
where TKey : IEquatable<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Creates a combined text index.
|
|
||||||
/// IndexCreationOptions can be supplied to further specify
|
|
||||||
/// how the creation should be done.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
|
||||||
/// <param name="fields">The fields we want to index.</param>
|
|
||||||
/// <param name="indexCreationOptions">Options for creating an index.</param>
|
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
|
||||||
/// <returns>The result of the create index operation.</returns>
|
|
||||||
Task<string> CreateCombinedTextIndexAsync<TDocument, TKey>(IEnumerable<Expression<Func<TDocument, object>>> fields, IndexCreationOptions indexCreationOptions = null, string partitionKey = null)
|
|
||||||
where TDocument : IDocument<TKey>
|
|
||||||
where TKey : IEquatable<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Drops the index given a field name
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
|
||||||
/// <param name="indexName">The name of the index</param>
|
|
||||||
/// <param name="partitionKey">An optional partition key</param>
|
|
||||||
Task DropIndexAsync<TDocument, TKey>(string indexName, string partitionKey = null)
|
|
||||||
where TDocument : IDocument<TKey>
|
|
||||||
where TKey : IEquatable<TKey>;
|
|
||||||
}
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The base Repository, it is meant to be inherited from by your custom custom MongoRepository implementation.
|
/// 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.
|
/// Its constructor must be given a connection string and a database name.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public abstract partial class BaseMongoRepository : IBaseMongoRepository_Index
|
public abstract partial class BaseMongoRepository : IBaseMongoRepository_Index
|
||||||
{
|
{
|
||||||
private MongoDbIndexHandler _mongoDbIndexHandler;
|
private volatile IMongoDbIndexHandler _mongoDbIndexHandler;
|
||||||
protected virtual MongoDbIndexHandler MongoDbIndexHandler
|
|
||||||
|
protected virtual IMongoDbIndexHandler MongoDbIndexHandler
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ namespace MongoDbGenericRepository
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The contructor taking a <see cref="IMongoDbContext"/>.
|
/// The constructor taking a <see cref="IMongoDbContext"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="mongoDbContext">A mongodb context implementing <see cref="IMongoDbContext"/></param>
|
/// <param name="mongoDbContext">A mongodb context implementing <see cref="IMongoDbContext"/></param>
|
||||||
protected BaseMongoRepository(IMongoDbContext mongoDbContext) : base(mongoDbContext)
|
protected BaseMongoRepository(IMongoDbContext mongoDbContext) : base(mongoDbContext)
|
||||||
@@ -32,7 +32,7 @@ namespace MongoDbGenericRepository
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The contructor taking a <see cref="IMongoDatabase"/>.
|
/// The constructor taking a <see cref="IMongoDatabase"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="mongoDatabase">A mongodb context implementing <see cref="IMongoDatabase"/></param>
|
/// <param name="mongoDatabase">A mongodb context implementing <see cref="IMongoDatabase"/></param>
|
||||||
protected BaseMongoRepository(IMongoDatabase mongoDatabase) : base(mongoDatabase)
|
protected BaseMongoRepository(IMongoDatabase mongoDatabase) : base(mongoDatabase)
|
||||||
|
|||||||
@@ -13,8 +13,9 @@ namespace MongoDbGenericRepository
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public abstract partial class BaseMongoRepository : IBaseMongoRepository_Update
|
public abstract partial class BaseMongoRepository : IBaseMongoRepository_Update
|
||||||
{
|
{
|
||||||
private MongoDbUpdater _mongoDbUpdater;
|
private volatile IMongoDbUpdater _mongoDbUpdater;
|
||||||
protected virtual MongoDbUpdater MongoDbUpdater
|
|
||||||
|
protected virtual IMongoDbUpdater MongoDbUpdater
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ namespace MongoDbGenericRepository.DataAccess.Base
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// A base class for accessing the Database and its Collections.
|
/// A base class for accessing the Database and its Collections.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class DataAccessBase
|
public class DataAccessBase : IDataAccessBase
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The MongoDbContext
|
/// The MongoDbContext
|
||||||
|
|||||||
@@ -0,0 +1,56 @@
|
|||||||
|
using System;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
using MongoDB.Driver;
|
||||||
|
using MongoDB.Driver.Linq;
|
||||||
|
using MongoDbGenericRepository.Models;
|
||||||
|
|
||||||
|
namespace MongoDbGenericRepository.DataAccess.Base
|
||||||
|
{
|
||||||
|
public interface IDataAccessBase
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a IMongoQueryable for a potentially partitioned document type and a filter.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
|
/// <param name="filter">The filter definition.</param>
|
||||||
|
/// <param name="partitionKey">The collection partition key.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
IMongoQueryable<TDocument> GetQuery<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a collections for a potentially partitioned document type.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
|
/// <param name="document">The document.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
IMongoCollection<TDocument> HandlePartitioned<TDocument, TKey>(TDocument document)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a collections for a potentially partitioned document type.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
|
/// <param name="partitionKey">The collection partition key.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
IMongoCollection<TDocument> HandlePartitioned<TDocument, TKey>(string partitionKey)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a collections for the type TDocument with a partition key.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
|
/// <param name="partitionKey">The collection partition key.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
IMongoCollection<TDocument> GetCollection<TDocument, TKey>(string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,106 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using MongoDB.Driver;
|
||||||
|
using MongoDB.Driver.Linq;
|
||||||
|
using MongoDbGenericRepository.DataAccess.Base;
|
||||||
|
using MongoDbGenericRepository.Models;
|
||||||
|
|
||||||
|
namespace MongoDbGenericRepository.DataAccess.Create
|
||||||
|
{
|
||||||
|
public interface IMongoDbCreator : IDataAccessBase
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Asynchronously adds a document to the collection.
|
||||||
|
/// Populates the Id and AddedAtUtc fields if necessary.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="document">The document you want to add.</param>
|
||||||
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
Task AddOneAsync<TDocument, TKey>(TDocument document, CancellationToken cancellationToken = default)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Adds a document to the collection.
|
||||||
|
/// Populates the Id and AddedAtUtc fields if necessary.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="document">The document you want to add.</param>
|
||||||
|
void AddOne<TDocument, TKey>(TDocument document)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Asynchronously adds a list of documents to the collection.
|
||||||
|
/// Populates the Id and AddedAtUtc fields if necessary.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="documents">The documents you want to add.</param>
|
||||||
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
Task AddManyAsync<TDocument, TKey>(IEnumerable<TDocument> documents, CancellationToken cancellationToken = default)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Adds a list of documents to the collection.
|
||||||
|
/// Populates the Id and AddedAtUtc fields if necessary.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="documents">The documents you want to add.</param>
|
||||||
|
void AddMany<TDocument, TKey>(IEnumerable<TDocument> documents)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a IMongoQueryable for a potentially partitioned document type and a filter.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
|
/// <param name="filter">The filter definition.</param>
|
||||||
|
/// <param name="partitionKey">The collection partition key.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
IMongoQueryable<TDocument> GetQuery<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a collections for a potentially partitioned document type.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
|
/// <param name="document">The document.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
IMongoCollection<TDocument> HandlePartitioned<TDocument, TKey>(TDocument document)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a collections for a potentially partitioned document type.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
|
/// <param name="partitionKey">The collection partition key.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
IMongoCollection<TDocument> HandlePartitioned<TDocument, TKey>(string partitionKey)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a collections for the type TDocument with a partition key.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
|
/// <param name="partitionKey">The collection partition key.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
IMongoCollection<TDocument> GetCollection<TDocument, TKey>(string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -14,7 +14,7 @@ namespace MongoDbGenericRepository.DataAccess.Create
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// A class to insert MongoDb document.
|
/// A class to insert MongoDb document.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class MongoDbCreator : DataAccessBase
|
public class MongoDbCreator : DataAccessBase, IMongoDbCreator
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The construct of the MongoDbCreator class.
|
/// The construct of the MongoDbCreator class.
|
||||||
|
|||||||
@@ -0,0 +1,151 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using MongoDB.Driver;
|
||||||
|
using MongoDB.Driver.Linq;
|
||||||
|
using MongoDbGenericRepository.DataAccess.Base;
|
||||||
|
using MongoDbGenericRepository.Models;
|
||||||
|
|
||||||
|
namespace MongoDbGenericRepository.DataAccess.Delete
|
||||||
|
{
|
||||||
|
public interface IMongoDbEraser : IDataAccessBase
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Deletes a document.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="document">The document you want to delete.</param>
|
||||||
|
/// <returns>The number of documents deleted.</returns>
|
||||||
|
long DeleteOne<TDocument, TKey>(TDocument document)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Deletes a document matching the condition of the LINQ expression filter.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <returns>The number of documents deleted.</returns>
|
||||||
|
long DeleteOne<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Asynchronously deletes a document matching the condition of the LINQ expression filter.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="document">The document you want to delete.</param>
|
||||||
|
/// <returns>The number of documents deleted.</returns>
|
||||||
|
Task<long> DeleteOneAsync<TDocument, TKey>(TDocument document)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Asynchronously deletes a document matching the condition of the LINQ expression filter.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <returns>The number of documents deleted.</returns>
|
||||||
|
Task<long> DeleteOneAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Asynchronously deletes the documents matching the condition of the LINQ expression filter.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <returns>The number of documents deleted.</returns>
|
||||||
|
Task<long> DeleteManyAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Asynchronously deletes a list of documents.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="documents">The list of documents to delete.</param>
|
||||||
|
/// <returns>The number of documents deleted.</returns>
|
||||||
|
Task<long> DeleteManyAsync<TDocument, TKey>(IEnumerable<TDocument> documents)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Deletes a list of documents.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="documents">The list of documents to delete.</param>
|
||||||
|
/// <returns>The number of documents deleted.</returns>
|
||||||
|
long DeleteMany<TDocument, TKey>(IEnumerable<TDocument> documents)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Deletes the documents matching the condition of the LINQ expression filter.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <returns>The number of documents deleted.</returns>
|
||||||
|
long DeleteMany<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a IMongoQueryable for a potentially partitioned document type and a filter.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
|
/// <param name="filter">The filter definition.</param>
|
||||||
|
/// <param name="partitionKey">The collection partition key.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
IMongoQueryable<TDocument> GetQuery<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a collections for a potentially partitioned document type.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
|
/// <param name="document">The document.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
IMongoCollection<TDocument> HandlePartitioned<TDocument, TKey>(TDocument document)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a collections for a potentially partitioned document type.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
|
/// <param name="partitionKey">The collection partition key.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
IMongoCollection<TDocument> HandlePartitioned<TDocument, TKey>(string partitionKey)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a collections for the type TDocument with a partition key.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
|
/// <param name="partitionKey">The collection partition key.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
IMongoCollection<TDocument> GetCollection<TDocument, TKey>(string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -10,7 +10,7 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace MongoDbGenericRepository.DataAccess.Delete
|
namespace MongoDbGenericRepository.DataAccess.Delete
|
||||||
{
|
{
|
||||||
public class MongoDbEraser : DataAccessBase
|
public class MongoDbEraser : DataAccessBase, IMongoDbEraser
|
||||||
{
|
{
|
||||||
public MongoDbEraser(IMongoDbContext mongoDbContext) : base(mongoDbContext)
|
public MongoDbEraser(IMongoDbContext mongoDbContext) : base(mongoDbContext)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,156 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using MongoDB.Driver;
|
||||||
|
using MongoDB.Driver.Linq;
|
||||||
|
using MongoDbGenericRepository.DataAccess.Base;
|
||||||
|
using MongoDbGenericRepository.Models;
|
||||||
|
|
||||||
|
namespace MongoDbGenericRepository.DataAccess.Index
|
||||||
|
{
|
||||||
|
public interface IMongoDbIndexHandler : IDataAccessBase
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the names of the indexes present on a collection.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="partitionKey">An optional partition key</param>
|
||||||
|
/// <returns>A list containing the names of the indexes on on the concerned collection.</returns>
|
||||||
|
Task<List<string>> GetIndexesNamesAsync<TDocument, TKey>(string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Create a text index on the given field.
|
||||||
|
/// IndexCreationOptions can be supplied to further specify
|
||||||
|
/// how the creation should be done.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="field">The field we want to index.</param>
|
||||||
|
/// <param name="indexCreationOptions">Options for creating an index.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <returns>The result of the create index operation.</returns>
|
||||||
|
Task<string> CreateTextIndexAsync<TDocument, TKey>(Expression<Func<TDocument, object>> field, IndexCreationOptions indexCreationOptions = null, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates an index on the given field in ascending order.
|
||||||
|
/// IndexCreationOptions can be supplied to further specify
|
||||||
|
/// how the creation should be done.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="field">The field we want to index.</param>
|
||||||
|
/// <param name="indexCreationOptions">Options for creating an index.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <returns>The result of the create index operation.</returns>
|
||||||
|
Task<string> CreateAscendingIndexAsync<TDocument, TKey>(Expression<Func<TDocument, object>> field, IndexCreationOptions indexCreationOptions = null, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates an index on the given field in descending order.
|
||||||
|
/// IndexCreationOptions can be supplied to further specify
|
||||||
|
/// how the creation should be done.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="field">The field we want to index.</param>
|
||||||
|
/// <param name="indexCreationOptions">Options for creating an index.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <returns>The result of the create index operation.</returns>
|
||||||
|
Task<string> CreateDescendingIndexAsync<TDocument, TKey>(Expression<Func<TDocument, object>> field, IndexCreationOptions indexCreationOptions = null, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a hashed index on the given field.
|
||||||
|
/// IndexCreationOptions can be supplied to further specify
|
||||||
|
/// how the creation should be done.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="field">The field we want to index.</param>
|
||||||
|
/// <param name="indexCreationOptions">Options for creating an index.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <returns>The result of the create index operation.</returns>
|
||||||
|
Task<string> CreateHashedIndexAsync<TDocument, TKey>(Expression<Func<TDocument, object>> field, IndexCreationOptions indexCreationOptions = null, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a combined text index.
|
||||||
|
/// IndexCreationOptions can be supplied to further specify
|
||||||
|
/// how the creation should be done.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="fields">The fields we want to index.</param>
|
||||||
|
/// <param name="indexCreationOptions">Options for creating an index.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <returns>The result of the create index operation.</returns>
|
||||||
|
Task<string> CreateCombinedTextIndexAsync<TDocument, TKey>(IEnumerable<Expression<Func<TDocument, object>>> fields, IndexCreationOptions indexCreationOptions = null, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Drops the index given a field name
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="indexName">The name of the index</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key</param>
|
||||||
|
Task DropIndexAsync<TDocument, TKey>(string indexName, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a IMongoQueryable for a potentially partitioned document type and a filter.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
|
/// <param name="filter">The filter definition.</param>
|
||||||
|
/// <param name="partitionKey">The collection partition key.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
IMongoQueryable<TDocument> GetQuery<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a collections for a potentially partitioned document type.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
|
/// <param name="document">The document.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
IMongoCollection<TDocument> HandlePartitioned<TDocument, TKey>(TDocument document)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a collections for a potentially partitioned document type.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
|
/// <param name="partitionKey">The collection partition key.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
IMongoCollection<TDocument> HandlePartitioned<TDocument, TKey>(string partitionKey)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a collections for the type TDocument with a partition key.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
|
/// <param name="partitionKey">The collection partition key.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
IMongoCollection<TDocument> GetCollection<TDocument, TKey>(string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -10,7 +10,7 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace MongoDbGenericRepository.DataAccess.Index
|
namespace MongoDbGenericRepository.DataAccess.Index
|
||||||
{
|
{
|
||||||
public class MongoDbIndexHandler : DataAccessBase
|
public class MongoDbIndexHandler : DataAccessBase, IMongoDbIndexHandler
|
||||||
{
|
{
|
||||||
public MongoDbIndexHandler(IMongoDbContext mongoDbContext) : base(mongoDbContext)
|
public MongoDbIndexHandler(IMongoDbContext mongoDbContext) : base(mongoDbContext)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,631 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using MongoDB.Driver;
|
||||||
|
using MongoDB.Driver.Linq;
|
||||||
|
using MongoDbGenericRepository.DataAccess.Base;
|
||||||
|
using MongoDbGenericRepository.Models;
|
||||||
|
|
||||||
|
namespace MongoDbGenericRepository.DataAccess.Read
|
||||||
|
{
|
||||||
|
public interface IMongoDbReader : IDataAccessBase
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Asynchronously returns a projected document matching the filter condition.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <typeparam name="TProjection">The type representing the model you want to project to.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="projection">The projection expression.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
Task<TProjection> ProjectOneAsync<TDocument, TProjection, TKey>(
|
||||||
|
Expression<Func<TDocument, bool>> filter,
|
||||||
|
Expression<Func<TDocument, TProjection>> projection,
|
||||||
|
string partitionKey = null,
|
||||||
|
CancellationToken cancellationToken = default)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>
|
||||||
|
where TProjection : class;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns a projected document matching the filter condition.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <typeparam name="TProjection">The type representing the model you want to project to.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="projection">The projection expression.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
TProjection ProjectOne<TDocument, TProjection, TKey>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TProjection>> projection, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>
|
||||||
|
where TProjection : class;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Asynchronously returns a list of projected documents matching the filter condition.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <typeparam name="TProjection">The type representing the model you want to project to.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="projection">The projection expression.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
Task<List<TProjection>> ProjectManyAsync<TDocument, TProjection, TKey>(
|
||||||
|
Expression<Func<TDocument, bool>> filter,
|
||||||
|
Expression<Func<TDocument, TProjection>> projection,
|
||||||
|
string partitionKey = null,
|
||||||
|
CancellationToken cancellationToken = default)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>
|
||||||
|
where TProjection : class;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Asynchronously returns a list of projected documents matching the filter condition.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <typeparam name="TProjection">The type representing the model you want to project to.</typeparam>
|
||||||
|
/// <param name="filter">The document filter.</param>
|
||||||
|
/// <param name="projection">The projection expression.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
List<TProjection> ProjectMany<TDocument, TProjection, TKey>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TProjection>> projection, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>
|
||||||
|
where TProjection : class;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Groups a collection of documents given a grouping criteria,
|
||||||
|
/// and returns a dictionary of listed document groups with keys having the different values of the grouping criteria.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <typeparam name="TGroupKey">The type of the grouping criteria.</typeparam>
|
||||||
|
/// <typeparam name="TProjection">The type of the projected group.</typeparam>
|
||||||
|
/// <param name="groupingCriteria">The grouping criteria.</param>
|
||||||
|
/// <param name="groupProjection">The projected group result.</param>
|
||||||
|
/// <param name="partitionKey">The partition key of your document, if any.</param>
|
||||||
|
List<TProjection> GroupBy<TDocument, TGroupKey, TProjection, TKey>(
|
||||||
|
Expression<Func<TDocument, TGroupKey>> groupingCriteria,
|
||||||
|
Expression<Func<IGrouping<TGroupKey, TDocument>, TProjection>> groupProjection,
|
||||||
|
string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>
|
||||||
|
where TProjection : class, new();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Groups filtered a collection of documents given a grouping criteria,
|
||||||
|
/// and returns a dictionary of listed document groups with keys having the different values of the grouping criteria.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <typeparam name="TGroupKey">The type of the grouping criteria.</typeparam>
|
||||||
|
/// <typeparam name="TProjection">The type of the projected group.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="selector">The grouping criteria.</param>
|
||||||
|
/// <param name="projection">The projected group result.</param>
|
||||||
|
/// <param name="partitionKey">The partition key of your document, if any.</param>
|
||||||
|
List<TProjection> GroupBy<TDocument, TGroupKey, TProjection, TKey>(
|
||||||
|
Expression<Func<TDocument, bool>> filter,
|
||||||
|
Expression<Func<TDocument, TGroupKey>> selector,
|
||||||
|
Expression<Func<IGrouping<TGroupKey, TDocument>, TProjection>> projection,
|
||||||
|
string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>
|
||||||
|
where TProjection : class, new();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Groups filtered a collection of documents given a grouping criteria,
|
||||||
|
/// and returns a dictionary of listed document groups with keys having the different values of the grouping criteria.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <typeparam name="TGroupKey">The type of the grouping criteria.</typeparam>
|
||||||
|
/// <typeparam name="TProjection">The type of the projected group.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="selector">The grouping criteria.</param>
|
||||||
|
/// <param name="projection">The projected group result.</param>
|
||||||
|
/// <param name="partitionKey">The partition key of your document, if any.</param>
|
||||||
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
Task<List<TProjection>> GroupByAsync<TDocument, TGroupKey, TProjection, TKey>(
|
||||||
|
Expression<Func<TDocument, bool>> filter,
|
||||||
|
Expression<Func<TDocument, TGroupKey>> selector,
|
||||||
|
Expression<Func<IGrouping<TGroupKey, TDocument>, TProjection>> projection,
|
||||||
|
string partitionKey = null,
|
||||||
|
CancellationToken cancellationToken = default)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>
|
||||||
|
where TProjection : class, new();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Asynchronously returns a paginated list of the documents matching the filter condition.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="sortSelector">The property selector.</param>
|
||||||
|
/// <param name="ascending">Order of the sorting.</param>
|
||||||
|
/// <param name="skipNumber">The number of documents you want to skip. Default value is 0.</param>
|
||||||
|
/// <param name="takeNumber">The number of documents you want to take. Default value is 50.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
Task<List<TDocument>> GetSortedPaginatedAsync<TDocument, TKey>(
|
||||||
|
Expression<Func<TDocument, bool>> filter,
|
||||||
|
Expression<Func<TDocument, object>> sortSelector,
|
||||||
|
bool ascending = true,
|
||||||
|
int skipNumber = 0,
|
||||||
|
int takeNumber = 50,
|
||||||
|
string partitionKey = null,
|
||||||
|
CancellationToken cancellationToken = default)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Asynchronously returns a paginated list of the documents matching the filter condition.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="sortDefinition">The sort definition.</param>
|
||||||
|
/// <param name="skipNumber">The number of documents you want to skip. Default value is 0.</param>
|
||||||
|
/// <param name="takeNumber">The number of documents you want to take. Default value is 50.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
Task<List<TDocument>> GetSortedPaginatedAsync<TDocument, TKey>(
|
||||||
|
Expression<Func<TDocument, bool>> filter,
|
||||||
|
SortDefinition<TDocument> sortDefinition,
|
||||||
|
int skipNumber = 0,
|
||||||
|
int takeNumber = 50,
|
||||||
|
string partitionKey = null,
|
||||||
|
CancellationToken cancellationToken = default)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Asynchronously returns one document given its id.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="id">The Id of the document you want to get.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
Task<TDocument> GetByIdAsync<TDocument, TKey>(TKey id, string partitionKey = null, CancellationToken cancellationToken = default)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns one document given its id.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="id">The Id of the document you want to get.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
TDocument GetById<TDocument, TKey>(TKey id, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Asynchronously returns one document given filter definition.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="condition">A mongodb filter definition.</param>
|
||||||
|
/// <param name="findOption">A mongodb filter option.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
Task<TDocument> GetOneAsync<TDocument, TKey>(FilterDefinition<TDocument> condition, FindOptions findOption = null,
|
||||||
|
string partitionKey = null,
|
||||||
|
CancellationToken cancellationToken = default)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Asynchronously returns one document given an expression filter.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
Task<TDocument> GetOneAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null, CancellationToken cancellationToken = default)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns one document given filter definition.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="condition">A mongodb filter definition.</param>
|
||||||
|
/// <param name="findOption">A mongodb filter option.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
TDocument GetOne<TDocument, TKey>(FilterDefinition<TDocument> condition, FindOptions findOption = null, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns one document given an expression filter.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
TDocument GetOne<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns a collection cursor.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
IFindFluent<TDocument, TDocument> GetCursor<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns true if any of the document of the collection matches the filter condition.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="condition">A mongodb filter definition.</param>
|
||||||
|
/// <param name="countOption">A mongodb counting option.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
Task<bool> AnyAsync<TDocument, TKey>(FilterDefinition<TDocument> condition, CountOptions countOption = null, string partitionKey = null,
|
||||||
|
CancellationToken cancellationToken = default)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns true if any of the document of the collection matches the filter condition.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
Task<bool> AnyAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null, CancellationToken cancellationToken = default)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns true if any of the document of the collection matches the filter condition.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="condition">A mongodb filter definition.</param>
|
||||||
|
/// <param name="countOption">A mongodb counting option.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
bool Any<TDocument, TKey>(FilterDefinition<TDocument> condition, CountOptions countOption = null,
|
||||||
|
string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns true if any of the document of the collection matches the filter condition.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
bool Any<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Asynchronously returns a list of the documents matching the filter condition.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="condition">A mongodb filter definition.</param>
|
||||||
|
/// <param name="findOption">A mongodb filter option.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
Task<List<TDocument>> GetAllAsync<TDocument, TKey>(FilterDefinition<TDocument> condition,
|
||||||
|
FindOptions findOption = null, string partitionKey = null, CancellationToken cancellationToken = default)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Asynchronously returns a list of the documents matching the filter condition.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
Task<List<TDocument>> GetAllAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null, CancellationToken cancellationToken = default)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns a list of the documents matching the filter condition.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="condition">A mongodb filter definition.</param>
|
||||||
|
/// <param name="findOption">A mongodb filter option.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
List<TDocument> GetAll<TDocument, TKey>(FilterDefinition<TDocument> condition, FindOptions findOption = null,
|
||||||
|
string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns a list of the documents matching the filter condition.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
List<TDocument> GetAll<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Asynchronously counts how many documents match the filter condition.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="condition">A mongodb filter definition.</param>
|
||||||
|
/// <param name="countOption">A mongodb counting option.</param>
|
||||||
|
/// <param name="partitionKey">An optional partitionKey</param>
|
||||||
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
Task<long> CountAsync<TDocument, TKey>(FilterDefinition<TDocument> condition, CountOptions countOption = null,
|
||||||
|
string partitionKey = null, CancellationToken cancellationToken = default)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Asynchronously counts how many documents match the filter condition.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="partitionKey">An optional partitionKey</param>
|
||||||
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
Task<long> CountAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null, CancellationToken cancellationToken = default)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Counts how many documents match the filter condition.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="condition">A mongodb filter definition.</param>
|
||||||
|
/// <param name="countOption">A mongodb counting option.</param>
|
||||||
|
/// <param name="partitionKey">An optional partitionKey</param>
|
||||||
|
long Count<TDocument, TKey>(FilterDefinition<TDocument> condition, CountOptions countOption = null,
|
||||||
|
string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Counts how many documents match the filter condition.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="partitionKey">An optional partitionKey</param>
|
||||||
|
long Count<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="maxValueSelector">A property selector to order by descending.</param>
|
||||||
|
/// <param name="partitionKey">An optional partitionKey.</param>
|
||||||
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
Task<TDocument> GetByMaxAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, object>> maxValueSelector, string partitionKey = null, CancellationToken cancellationToken = default)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="maxValueSelector">A property selector to order by descending.</param>
|
||||||
|
/// <param name="partitionKey">An optional partitionKey.</param>
|
||||||
|
TDocument GetByMax<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, object>> maxValueSelector, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the document with the minimum value of a specified property in a MongoDB collections that is satisfying the filter.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="minValueSelector">A property selector to order by ascending.</param>
|
||||||
|
/// <param name="partitionKey">An optional partitionKey.</param>
|
||||||
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
Task<TDocument> GetByMinAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, object>> minValueSelector, string partitionKey = null, CancellationToken cancellationToken = default)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the document with the minimum value of a specified property in a MongoDB collections that is satisfying the filter.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="minValueSelector">A property selector to order by ascending.</param>
|
||||||
|
/// <param name="partitionKey">An optional partitionKey.</param>
|
||||||
|
TDocument GetByMin<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, object>> minValueSelector, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the maximum value of a property in a mongodb collections that is satisfying the filter.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
|
/// <typeparam name="TValue">The type of the field for which you want the maximum value.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="maxValueSelector">A property selector to order by ascending.</param>
|
||||||
|
/// <param name="partitionKey">An optional partitionKey.</param>
|
||||||
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
Task<TValue> GetMaxValueAsync<TDocument, TKey, TValue>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TValue>> maxValueSelector, string partitionKey = null, CancellationToken cancellationToken = default)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the maximum value of a property in a mongodb collections that is satisfying the filter.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
|
/// <typeparam name="TValue">The type of the value used to order the query.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="maxValueSelector">A property selector to order by ascending.</param>
|
||||||
|
/// <param name="partitionKey">An optional partitionKey.</param>
|
||||||
|
TValue GetMaxValue<TDocument, TKey, TValue>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TValue>> maxValueSelector, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the minimum value of a property in a mongodb collections that is satisfying the filter.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
|
/// <typeparam name="TValue">The type of the value used to order the query.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="minValueSelector">A property selector to order by ascending.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
Task<TValue> GetMinValueAsync<TDocument, TKey, TValue>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TValue>> minValueSelector, string partitionKey = null, CancellationToken cancellationToken = default)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the minimum value of a property in a mongodb collections that is satisfying the filter.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
|
/// <typeparam name="TValue">The type of the value used to order the query.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="minValueSelector">A property selector to order by ascending.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
TValue GetMinValue<TDocument, TKey, TValue>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TValue>> minValueSelector, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sums the values of a selected field for a given filtered collection of documents.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="selector">The field you want to sum.</param>
|
||||||
|
/// <param name="partitionKey">The partition key of your document, if any.</param>
|
||||||
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
Task<int> SumByAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter,
|
||||||
|
Expression<Func<TDocument, int>> selector,
|
||||||
|
string partitionKey = null,
|
||||||
|
CancellationToken cancellationToken = default)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sums the values of a selected field for a given filtered collection of documents.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="selector">The field you want to sum.</param>
|
||||||
|
/// <param name="partitionKey">The partition key of your document, if any.</param>
|
||||||
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
Task<decimal> SumByAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter,
|
||||||
|
Expression<Func<TDocument, decimal>> selector,
|
||||||
|
string partitionKey = null, CancellationToken cancellationToken = default)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sums the values of a selected field for a given filtered collection of documents.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="selector">The field you want to sum.</param>
|
||||||
|
/// <param name="partitionKey">The partition key of your document, if any.</param>
|
||||||
|
int SumBy<TDocument, TKey>(Expression<Func<TDocument, bool>> filter,
|
||||||
|
Expression<Func<TDocument, int>> selector,
|
||||||
|
string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sums the values of a selected field for a given filtered collection of documents.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="selector">The field you want to sum.</param>
|
||||||
|
/// <param name="partitionKey">The partition key of your document, if any.</param>
|
||||||
|
decimal SumBy<TDocument, TKey>(Expression<Func<TDocument, bool>> filter,
|
||||||
|
Expression<Func<TDocument, decimal>> selector,
|
||||||
|
string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a IMongoQueryable for a potentially partitioned document type and a filter.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
|
/// <param name="filter">The filter definition.</param>
|
||||||
|
/// <param name="partitionKey">The collection partition key.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
IMongoQueryable<TDocument> GetQuery<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a collections for a potentially partitioned document type.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
|
/// <param name="document">The document.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
IMongoCollection<TDocument> HandlePartitioned<TDocument, TKey>(TDocument document)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a collections for a potentially partitioned document type.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
|
/// <param name="partitionKey">The collection partition key.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
IMongoCollection<TDocument> HandlePartitioned<TDocument, TKey>(string partitionKey)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a collections for the type TDocument with a partition key.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
|
/// <param name="partitionKey">The collection partition key.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
IMongoCollection<TDocument> GetCollection<TDocument, TKey>(string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -10,7 +10,7 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace MongoDbGenericRepository.DataAccess.Read
|
namespace MongoDbGenericRepository.DataAccess.Read
|
||||||
{
|
{
|
||||||
public partial class MongoDbReader
|
public partial class MongoDbReader : IMongoDbReader
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Asynchronously returns a projected document matching the filter condition.
|
/// Asynchronously returns a projected document matching the filter condition.
|
||||||
|
|||||||
@@ -0,0 +1,432 @@
|
|||||||
|
using System;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using MongoDB.Driver;
|
||||||
|
using MongoDB.Driver.Linq;
|
||||||
|
using MongoDbGenericRepository.DataAccess.Base;
|
||||||
|
using MongoDbGenericRepository.Models;
|
||||||
|
|
||||||
|
namespace MongoDbGenericRepository.DataAccess.Update
|
||||||
|
{
|
||||||
|
public interface IMongoDbUpdater : IDataAccessBase
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Asynchronously Updates a document.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="modifiedDocument">The document with the modifications you want to persist.</param>
|
||||||
|
Task<bool> UpdateOneAsync<TDocument, TKey>(TDocument modifiedDocument)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Takes a document you want to modify and applies the update you have defined in MongoDb.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="documentToModify">The document you want to modify.</param>
|
||||||
|
/// <param name="update">The update definition for the document.</param>
|
||||||
|
Task<bool> UpdateOneAsync<TDocument, TKey>(TDocument documentToModify, UpdateDefinition<TDocument> update)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Updates the property field with the given value update a property field in entities.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <typeparam name="TField">The type of the field.</typeparam>
|
||||||
|
/// <param name="documentToModify">The document you want to modify.</param>
|
||||||
|
/// <param name="field">The field selector.</param>
|
||||||
|
/// <param name="value">The new value of the property field.</param>
|
||||||
|
Task<bool> UpdateOneAsync<TDocument, TKey, TField>(TDocument documentToModify, Expression<Func<TDocument, TField>> field, TField value)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Updates the property field with the given value update a property field in entities.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <typeparam name="TField">The type of the field.</typeparam>
|
||||||
|
/// <param name="filter">The document filter.</param>
|
||||||
|
/// <param name="field">The field selector.</param>
|
||||||
|
/// <param name="value">The new value of the property field.</param>
|
||||||
|
/// <param name="partitionKey">The value of the partition key.</param>
|
||||||
|
Task<bool> UpdateOneAsync<TDocument, TKey, TField>(FilterDefinition<TDocument> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// For the entity selected by the filter, updates the property field with the given value.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <typeparam name="TField">The type of the field.</typeparam>
|
||||||
|
/// <param name="filter">The document filter.</param>
|
||||||
|
/// <param name="field">The field selector.</param>
|
||||||
|
/// <param name="value">The new value of the property field.</param>
|
||||||
|
/// <param name="partitionKey">The partition key for the document.</param>
|
||||||
|
Task<bool> UpdateOneAsync<TDocument, TKey, TField>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Updates a document.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="session">The client session.</param>
|
||||||
|
/// <param name="modifiedDocument">The document with the modifications you want to persist.</param>
|
||||||
|
/// <param name="cancellationToken">The optional cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<bool> UpdateOneAsync<TDocument, TKey>(IClientSessionHandle session, TDocument modifiedDocument, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Updates a document.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="session">The client session.</param>
|
||||||
|
/// <param name="documentToModify">The document to modify.</param>
|
||||||
|
/// <param name="update">The update definition.</param>
|
||||||
|
/// <param name="cancellationToken">The optional cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<bool> UpdateOneAsync<TDocument, TKey>(IClientSessionHandle session, TDocument documentToModify, UpdateDefinition<TDocument> update, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Updates a document.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <typeparam name="TField">The type of the field to update.</typeparam>
|
||||||
|
/// <param name="session">The client session.</param>
|
||||||
|
/// <param name="documentToModify">The document to modify.</param>
|
||||||
|
/// <param name="field">The field to update.</param>
|
||||||
|
/// <param name="value">The value of the field.</param>
|
||||||
|
/// <param name="cancellationToken">The optional cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<bool> UpdateOneAsync<TDocument, TKey, TField>(IClientSessionHandle session, TDocument documentToModify, Expression<Func<TDocument, TField>> field, TField value, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Updates a document.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <typeparam name="TField">The type of the field to update.</typeparam>
|
||||||
|
/// <param name="session">The client session.</param>
|
||||||
|
/// <param name="filter">The filter for the update.</param>
|
||||||
|
/// <param name="field">The field to update.</param>
|
||||||
|
/// <param name="value">The value of the field.</param>
|
||||||
|
/// <param name="partitionKey">The optional partition key.</param>
|
||||||
|
/// <param name="cancellationToken">The optional cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<bool> UpdateOneAsync<TDocument, TKey, TField>(IClientSessionHandle session, FilterDefinition<TDocument> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Updates a document.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <typeparam name="TField">The type of the field to update.</typeparam>
|
||||||
|
/// <param name="session">The client session.</param>
|
||||||
|
/// <param name="filter">The filter for the update.</param>
|
||||||
|
/// <param name="field">The field to update.</param>
|
||||||
|
/// <param name="value">The value of the field.</param>
|
||||||
|
/// <param name="partitionKey">The optional partition key.</param>
|
||||||
|
/// <param name="cancellationToken">The optional cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<bool> UpdateOneAsync<TDocument, TKey, TField>(IClientSessionHandle session, Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Updates a document.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="modifiedDocument">The document with the modifications you want to persist.</param>
|
||||||
|
bool UpdateOne<TDocument, TKey>(TDocument modifiedDocument)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Takes a document you want to modify and applies the update you have defined in MongoDb.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="documentToModify">The document you want to modify.</param>
|
||||||
|
/// <param name="update">The update definition for the document.</param>
|
||||||
|
bool UpdateOne<TDocument, TKey>(TDocument documentToModify, UpdateDefinition<TDocument> update)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Updates the property field with the given value update a property field in entities.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <typeparam name="TField">The type of the field.</typeparam>
|
||||||
|
/// <param name="documentToModify">The document you want to modify.</param>
|
||||||
|
/// <param name="field">The field selector.</param>
|
||||||
|
/// <param name="value">The new value of the property field.</param>
|
||||||
|
bool UpdateOne<TDocument, TKey, TField>(TDocument documentToModify, Expression<Func<TDocument, TField>> field, TField value)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Updates the property field with the given value.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <typeparam name="TField">The type of the field.</typeparam>
|
||||||
|
/// <param name="filter">The document filter.</param>
|
||||||
|
/// <param name="field">The field selector.</param>
|
||||||
|
/// <param name="value">The new value of the property field.</param>
|
||||||
|
/// <param name="partitionKey">The value of the partition key.</param>
|
||||||
|
bool UpdateOne<TDocument, TKey, TField>(FilterDefinition<TDocument> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// For the entity selected by the filter, updates the property field with the given value.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <typeparam name="TField">The type of the field.</typeparam>
|
||||||
|
/// <param name="filter">The document filter.</param>
|
||||||
|
/// <param name="field">The field selector.</param>
|
||||||
|
/// <param name="value">The new value of the property field.</param>
|
||||||
|
/// <param name="partitionKey">The partition key for the document.</param>
|
||||||
|
bool UpdateOne<TDocument, TKey, TField>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Updates a document.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="session">The client session.</param>
|
||||||
|
/// <param name="modifiedDocument">The document with the modifications you want to persist.</param>
|
||||||
|
/// <param name="cancellationToken">The optional cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
bool UpdateOne<TDocument, TKey>(IClientSessionHandle session, TDocument modifiedDocument, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Updates a document.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="session">The client session.</param>
|
||||||
|
/// <param name="documentToModify">The document to modify.</param>
|
||||||
|
/// <param name="update">The update definition.</param>
|
||||||
|
/// <param name="cancellationToken">The optional cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
bool UpdateOne<TDocument, TKey>(IClientSessionHandle session, TDocument documentToModify, UpdateDefinition<TDocument> update, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Updates a document.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <typeparam name="TField">The type of the field to update.</typeparam>
|
||||||
|
/// <param name="session">The client session.</param>
|
||||||
|
/// <param name="documentToModify">The document to modify.</param>
|
||||||
|
/// <param name="field">The field to update.</param>
|
||||||
|
/// <param name="value">The value of the field.</param>
|
||||||
|
/// <param name="cancellationToken">The optional cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
bool UpdateOne<TDocument, TKey, TField>(IClientSessionHandle session, TDocument documentToModify, Expression<Func<TDocument, TField>> field, TField value, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Updates a document.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <typeparam name="TField">The type of the field to update.</typeparam>
|
||||||
|
/// <param name="session">The client session.</param>
|
||||||
|
/// <param name="filter">The filter for the update.</param>
|
||||||
|
/// <param name="field">The field to update.</param>
|
||||||
|
/// <param name="value">The value of the field.</param>
|
||||||
|
/// <param name="partitionKey">The optional partition key.</param>
|
||||||
|
/// <param name="cancellationToken">The optional cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
bool UpdateOne<TDocument, TKey, TField>(IClientSessionHandle session, FilterDefinition<TDocument> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Updates a document.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <typeparam name="TField">The type of the field to update.</typeparam>
|
||||||
|
/// <param name="session">The client session.</param>
|
||||||
|
/// <param name="filter">The filter for the update.</param>
|
||||||
|
/// <param name="field">The field to update.</param>
|
||||||
|
/// <param name="value">The value of the field.</param>
|
||||||
|
/// <param name="partitionKey">The optional partition key.</param>
|
||||||
|
/// <param name="cancellationToken">The optional cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
bool UpdateOne<TDocument, TKey, TField>(IClientSessionHandle session, Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// For the entities selected by the filter, updates the property field with the given value.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <typeparam name="TField">The type of the field.</typeparam>
|
||||||
|
/// <param name="filter">The document filter.</param>
|
||||||
|
/// <param name="field">The field selector.</param>
|
||||||
|
/// <param name="value">The new value of the property field.</param>
|
||||||
|
/// <param name="partitionKey">The partition key for the document.</param>
|
||||||
|
Task<long> UpdateManyAsync<TDocument, TKey, TField>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// For the entities selected by the filter, updates the property field with the given value.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <typeparam name="TField">The type of the field.</typeparam>
|
||||||
|
/// <param name="filter">The document filter.</param>
|
||||||
|
/// <param name="field">The field selector.</param>
|
||||||
|
/// <param name="value">The new value of the property field.</param>
|
||||||
|
/// <param name="partitionKey">The value of the partition key.</param>
|
||||||
|
Task<long> UpdateManyAsync<TDocument, TKey, TField>(FilterDefinition<TDocument> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// For the entities selected by the filter, apply the update definition.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="filter">The document filter.</param>
|
||||||
|
/// <param name="field">The field selector.</param>
|
||||||
|
/// <param name="value">The new value of the property field.</param>
|
||||||
|
/// <param name="partitionKey">The value of the partition key.</param>
|
||||||
|
Task<long> UpdateManyAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, UpdateDefinition<TDocument> update, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// For the entities selected by the filter, apply the update definition.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <typeparam name="TField">The type of the field.</typeparam>
|
||||||
|
/// <param name="filter">The document filter.</param>
|
||||||
|
/// <param name="updateDefinition">The update definition.</param>
|
||||||
|
/// <param name="partitionKey">The value of the partition key.</param>
|
||||||
|
Task<long> UpdateManyAsync<TDocument, TKey>(FilterDefinition<TDocument> filter, UpdateDefinition<TDocument> updateDefinition, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// For the entities selected by the filter, updates the property field with the given value.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <typeparam name="TField">The type of the field.</typeparam>
|
||||||
|
/// <param name="filter">The document filter.</param>
|
||||||
|
/// <param name="field">The field selector.</param>
|
||||||
|
/// <param name="value">The new value of the property field.</param>
|
||||||
|
/// <param name="partitionKey">The partition key for the document.</param>
|
||||||
|
long UpdateMany<TDocument, TKey, TField>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// For the entities selected by the filter, updates the property field with the given value.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <typeparam name="TField">The type of the field.</typeparam>
|
||||||
|
/// <param name="filter">The document filter.</param>
|
||||||
|
/// <param name="field">The field selector.</param>
|
||||||
|
/// <param name="value">The new value of the property field.</param>
|
||||||
|
/// <param name="partitionKey">The value of the partition key.</param>
|
||||||
|
long UpdateMany<TDocument, TKey, TField>(FilterDefinition<TDocument> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// For the entities selected by the filter, apply the update definition.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <typeparam name="TField">The type of the field.</typeparam>
|
||||||
|
/// <param name="filter">The document filter.</param>
|
||||||
|
/// <param name="UpdateDefinition">The update definition.</param>
|
||||||
|
/// <param name="partitionKey">The value of the partition key.</param>
|
||||||
|
long UpdateMany<TDocument, TKey>(FilterDefinition<TDocument> filter, UpdateDefinition<TDocument> UpdateDefinition, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a IMongoQueryable for a potentially partitioned document type and a filter.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
|
/// <param name="filter">The filter definition.</param>
|
||||||
|
/// <param name="partitionKey">The collection partition key.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
IMongoQueryable<TDocument> GetQuery<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a collections for a potentially partitioned document type.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
|
/// <param name="document">The document.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
IMongoCollection<TDocument> HandlePartitioned<TDocument, TKey>(TDocument document)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a collections for a potentially partitioned document type.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
|
/// <param name="partitionKey">The collection partition key.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
IMongoCollection<TDocument> HandlePartitioned<TDocument, TKey>(string partitionKey)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a collections for the type TDocument with a partition key.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
|
/// <param name="partitionKey">The collection partition key.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
IMongoCollection<TDocument> GetCollection<TDocument, TKey>(string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,7 +8,7 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace MongoDbGenericRepository.DataAccess.Update
|
namespace MongoDbGenericRepository.DataAccess.Update
|
||||||
{
|
{
|
||||||
public partial class MongoDbUpdater : DataAccessBase
|
public partial class MongoDbUpdater : DataAccessBase, IMongoDbUpdater
|
||||||
{
|
{
|
||||||
public MongoDbUpdater(IMongoDbContext mongoDbContext) : base(mongoDbContext)
|
public MongoDbUpdater(IMongoDbContext mongoDbContext) : base(mongoDbContext)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,61 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using MongoDbGenericRepository.Models;
|
||||||
|
|
||||||
|
namespace MongoDbGenericRepository
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The IBaseMongoRepository_Create interface to expose document creation functionality
|
||||||
|
/// with document having an Id of type Guid.
|
||||||
|
/// </summary>
|
||||||
|
public interface IBaseMongoRepository_Create : IBaseMongoRepository_Create<Guid>
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Asynchronously adds a document to the collection.
|
||||||
|
/// Populates the Id and AddedAtUtc fields if necessary.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="document">The document you want to add.</param>
|
||||||
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
Task AddOneAsync<TDocument, TKey>(TDocument document, CancellationToken cancellationToken = default)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Adds a document to the collection.
|
||||||
|
/// Populates the Id and AddedAtUtc fields if necessary.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="document">The document you want to add.</param>
|
||||||
|
void AddOne<TDocument, TKey>(TDocument document)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Asynchronously adds a list of documents to the collection.
|
||||||
|
/// Populates the Id and AddedAtUtc fields if necessary.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="documents">The documents you want to add.</param>
|
||||||
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
Task AddManyAsync<TDocument, TKey>(IEnumerable<TDocument> documents, CancellationToken cancellationToken = default)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Adds a list of documents to the collection.
|
||||||
|
/// Populates the Id and AddedAtUtc fields if necessary.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="documents">The documents you want to add.</param>
|
||||||
|
void AddMany<TDocument, TKey>(IEnumerable<TDocument> documents)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,103 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using MongoDbGenericRepository.Models;
|
||||||
|
|
||||||
|
namespace MongoDbGenericRepository
|
||||||
|
{
|
||||||
|
public interface IBaseMongoRepository_Delete : IBaseMongoRepository_Delete<Guid>
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Deletes a document.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="document">The document you want to delete.</param>
|
||||||
|
/// <returns>The number of documents deleted.</returns>
|
||||||
|
long DeleteOne<TDocument, TKey>(TDocument document)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Asynchronously deletes a document matching the condition of the LINQ expression filter.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="document">The document you want to delete.</param>
|
||||||
|
/// <returns>The number of documents deleted.</returns>
|
||||||
|
Task<long> DeleteOneAsync<TDocument, TKey>(TDocument document)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Deletes a document matching the condition of the LINQ expression filter.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <returns>The number of documents deleted.</returns>
|
||||||
|
long DeleteOne<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Asynchronously deletes a document matching the condition of the LINQ expression filter.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <returns>The number of documents deleted.</returns>
|
||||||
|
Task<long> DeleteOneAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Asynchronously deletes the documents matching the condition of the LINQ expression filter.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <returns>The number of documents deleted.</returns>
|
||||||
|
Task<long> DeleteManyAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Asynchronously deletes a list of documents.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="documents">The list of documents to delete.</param>
|
||||||
|
/// <returns>The number of documents deleted.</returns>
|
||||||
|
Task<long> DeleteManyAsync<TDocument, TKey>(IEnumerable<TDocument> documents)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Deletes a list of documents.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="documents">The list of documents to delete.</param>
|
||||||
|
/// <returns>The number of documents deleted.</returns>
|
||||||
|
long DeleteMany<TDocument, TKey>(IEnumerable<TDocument> documents)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Deletes the documents matching the condition of the LINQ expression filter.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <returns>The number of documents deleted.</returns>
|
||||||
|
long DeleteMany<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,108 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using MongoDbGenericRepository.Models;
|
||||||
|
|
||||||
|
namespace MongoDbGenericRepository
|
||||||
|
{
|
||||||
|
public interface IBaseMongoRepository_Index : IBaseMongoRepository_Index<Guid>
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the names of the indexes present on a collection.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="partitionKey">An optional partition key</param>
|
||||||
|
/// <returns>A list containing the names of the indexes on on the concerned collection.</returns>
|
||||||
|
Task<List<string>> GetIndexesNamesAsync<TDocument, TKey>(string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Create a text index on the given field.
|
||||||
|
/// IndexCreationOptions can be supplied to further specify
|
||||||
|
/// how the creation should be done.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="field">The field we want to index.</param>
|
||||||
|
/// <param name="indexCreationOptions">Options for creating an index.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <returns>The result of the create index operation.</returns>
|
||||||
|
Task<string> CreateTextIndexAsync<TDocument, TKey>(Expression<Func<TDocument, object>> field, IndexCreationOptions indexCreationOptions = null, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates an index on the given field in ascending order.
|
||||||
|
/// IndexCreationOptions can be supplied to further specify
|
||||||
|
/// how the creation should be done.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="field">The field we want to index.</param>
|
||||||
|
/// <param name="indexCreationOptions">Options for creating an index.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <returns>The result of the create index operation.</returns>
|
||||||
|
Task<string> CreateAscendingIndexAsync<TDocument, TKey>(Expression<Func<TDocument, object>> field, IndexCreationOptions indexCreationOptions = null, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates an index on the given field in descending order.
|
||||||
|
/// IndexCreationOptions can be supplied to further specify
|
||||||
|
/// how the creation should be done.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="field">The field we want to index.</param>
|
||||||
|
/// <param name="indexCreationOptions">Options for creating an index.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <returns>The result of the create index operation.</returns>
|
||||||
|
Task<string> CreateDescendingIndexAsync<TDocument, TKey>(Expression<Func<TDocument, object>> field, IndexCreationOptions indexCreationOptions = null, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a hashed index on the given field.
|
||||||
|
/// IndexCreationOptions can be supplied to further specify
|
||||||
|
/// how the creation should be done.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="field">The field we want to index.</param>
|
||||||
|
/// <param name="indexCreationOptions">Options for creating an index.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <returns>The result of the create index operation.</returns>
|
||||||
|
Task<string> CreateHashedIndexAsync<TDocument, TKey>(Expression<Func<TDocument, object>> field, IndexCreationOptions indexCreationOptions = null, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a combined text index.
|
||||||
|
/// IndexCreationOptions can be supplied to further specify
|
||||||
|
/// how the creation should be done.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="fields">The fields we want to index.</param>
|
||||||
|
/// <param name="indexCreationOptions">Options for creating an index.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <returns>The result of the create index operation.</returns>
|
||||||
|
Task<string> CreateCombinedTextIndexAsync<TDocument, TKey>(IEnumerable<Expression<Func<TDocument, object>>> fields, IndexCreationOptions indexCreationOptions = null, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Drops the index given a field name
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for a Document.</typeparam>
|
||||||
|
/// <param name="indexName">The name of the index</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key</param>
|
||||||
|
Task DropIndexAsync<TDocument, TKey>(string indexName, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,59 +7,18 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace MongoDbGenericRepository
|
namespace MongoDbGenericRepository
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
/// The interface exposing data insertion functionality for Key typed repositories.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TKey"></typeparam>
|
|
||||||
public interface IBaseMongoRepository_Create<TKey> where TKey : IEquatable<TKey>
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Asynchronously adds a document to the collection.
|
|
||||||
/// Populates the Id and AddedAtUtc fields if necessary.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <param name="document">The document you want to add.</param>
|
|
||||||
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
|
||||||
Task AddOneAsync<TDocument>(TDocument document, CancellationToken cancellationToken = default) where TDocument : IDocument<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Adds a document to the collection.
|
|
||||||
/// Populates the Id and AddedAtUtc fields if necessary.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <param name="document">The document you want to add.</param>
|
|
||||||
void AddOne<TDocument>(TDocument document) where TDocument : IDocument<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Asynchronously adds a list of documents to the collection.
|
|
||||||
/// Populates the Id and AddedAtUtc fields if necessary.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <param name="documents">The documents you want to add.</param>
|
|
||||||
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
|
||||||
Task AddManyAsync<TDocument>(IEnumerable<TDocument> documents, CancellationToken cancellationToken = default) where TDocument : IDocument<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Adds a list of documents to the collection.
|
|
||||||
/// Populates the Id and AddedAtUtc fields if necessary.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <param name="documents">The documents you want to add.</param>
|
|
||||||
void AddMany<TDocument>(IEnumerable<TDocument> documents) where TDocument : IDocument<TKey>;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The base Repository, it is meant to be inherited from by your custom custom MongoRepository implementation.
|
/// 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.
|
/// Its constructor must be given a connection string and a database name.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public abstract partial class BaseMongoRepository<TKey> : IBaseMongoRepository_Create<TKey> where TKey : IEquatable<TKey>
|
public abstract partial class BaseMongoRepository<TKey> : IBaseMongoRepository_Create<TKey> where TKey : IEquatable<TKey>
|
||||||
{
|
{
|
||||||
private MongoDbCreator _mongoDbCreator;
|
private volatile IMongoDbCreator _mongoDbCreator;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The MongoDb accessor to insert data.
|
/// The MongoDb accessor to insert data.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected virtual MongoDbCreator MongoDbCreator
|
protected virtual IMongoDbCreator MongoDbCreator
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -7,98 +7,15 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace MongoDbGenericRepository
|
namespace MongoDbGenericRepository
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
/// The interface exposing deletion functionality for Key typed repositories.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TKey">The type of the document Id.</typeparam>
|
|
||||||
public interface IBaseMongoRepository_Delete<TKey> where TKey : IEquatable<TKey>
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Deletes a document.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <param name="document">The document you want to delete.</param>
|
|
||||||
/// <returns>The number of documents deleted.</returns>
|
|
||||||
long DeleteOne<TDocument>(TDocument document)
|
|
||||||
where TDocument : IDocument<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Asynchronously deletes a document matching the condition of the LINQ expression filter.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <param name="document">The document you want to delete.</param>
|
|
||||||
/// <returns>The number of documents deleted.</returns>
|
|
||||||
Task<long> DeleteOneAsync<TDocument>(TDocument document)
|
|
||||||
where TDocument : IDocument<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Deletes a document matching the condition of the LINQ expression filter.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <param name="filter">A LINQ expression filter.</param>
|
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
|
||||||
/// <returns>The number of documents deleted.</returns>
|
|
||||||
long DeleteOne<TDocument>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
|
||||||
where TDocument : IDocument<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Asynchronously deletes a document matching the condition of the LINQ expression filter.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <param name="filter">A LINQ expression filter.</param>
|
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
|
||||||
/// <returns>The number of documents deleted.</returns>
|
|
||||||
Task<long> DeleteOneAsync<TDocument>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
|
||||||
where TDocument : IDocument<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Asynchronously deletes the documents matching the condition of the LINQ expression filter.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <param name="filter">A LINQ expression filter.</param>
|
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
|
||||||
/// <returns>The number of documents deleted.</returns>
|
|
||||||
Task<long> DeleteManyAsync<TDocument>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
|
||||||
where TDocument : IDocument<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Asynchronously deletes a list of documents.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <param name="documents">The list of documents to delete.</param>
|
|
||||||
/// <returns>The number of documents deleted.</returns>
|
|
||||||
Task<long> DeleteManyAsync<TDocument>(IEnumerable<TDocument> documents)
|
|
||||||
where TDocument : IDocument<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Deletes a list of documents.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <param name="documents">The list of documents to delete.</param>
|
|
||||||
/// <returns>The number of documents deleted.</returns>
|
|
||||||
long DeleteMany<TDocument>(IEnumerable<TDocument> documents)
|
|
||||||
where TDocument : IDocument<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Deletes the documents matching the condition of the LINQ expression filter.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <param name="filter">A LINQ expression filter.</param>
|
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
|
||||||
/// <returns>The number of documents deleted.</returns>
|
|
||||||
long DeleteMany<TDocument>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
|
||||||
where TDocument : IDocument<TKey>;
|
|
||||||
}
|
|
||||||
|
|
||||||
public abstract partial class BaseMongoRepository<TKey>: IBaseMongoRepository_Delete<TKey>
|
public abstract partial class BaseMongoRepository<TKey>: IBaseMongoRepository_Delete<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
{
|
{
|
||||||
private MongoDbEraser _mongoDbEraser;
|
private volatile IMongoDbEraser _mongoDbEraser;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The MongoDb accessor to delete data.
|
/// The MongoDb accessor to delete data.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected virtual MongoDbEraser MongoDbEraser
|
protected virtual IMongoDbEraser MongoDbEraser
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -7,96 +7,6 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace MongoDbGenericRepository
|
namespace MongoDbGenericRepository
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
/// The interface exposing index management functionality for Key typed repositories.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TKey"></typeparam>
|
|
||||||
public interface IBaseMongoRepository_Index<TKey> where TKey : IEquatable<TKey>
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Returns the names of the indexes present on a collection.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <param name="partitionKey">An optional partition key</param>
|
|
||||||
/// <returns>A list containing the names of the indexes on on the concerned collection.</returns>
|
|
||||||
Task<List<string>> GetIndexesNamesAsync<TDocument>(string partitionKey = null)
|
|
||||||
where TDocument : IDocument<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Create a text index on the given field.
|
|
||||||
/// IndexCreationOptions can be supplied to further specify
|
|
||||||
/// how the creation should be done.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <param name="field">The field we want to index.</param>
|
|
||||||
/// <param name="indexCreationOptions">Options for creating an index.</param>
|
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
|
||||||
/// <returns>The result of the create index operation.</returns>
|
|
||||||
Task<string> CreateTextIndexAsync<TDocument>(Expression<Func<TDocument, object>> field, IndexCreationOptions indexCreationOptions = null, string partitionKey = null)
|
|
||||||
where TDocument : IDocument<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Creates an index on the given field in ascending order.
|
|
||||||
/// IndexCreationOptions can be supplied to further specify
|
|
||||||
/// how the creation should be done.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <param name="field">The field we want to index.</param>
|
|
||||||
/// <param name="indexCreationOptions">Options for creating an index.</param>
|
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
|
||||||
/// <returns>The result of the create index operation.</returns>
|
|
||||||
Task<string> CreateAscendingIndexAsync<TDocument>(Expression<Func<TDocument, object>> field, IndexCreationOptions indexCreationOptions = null, string partitionKey = null)
|
|
||||||
where TDocument : IDocument<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Creates an index on the given field in descending order.
|
|
||||||
/// IndexCreationOptions can be supplied to further specify
|
|
||||||
/// how the creation should be done.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <param name="field">The field we want to index.</param>
|
|
||||||
/// <param name="indexCreationOptions">Options for creating an index.</param>
|
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
|
||||||
/// <returns>The result of the create index operation.</returns>
|
|
||||||
Task<string> CreateDescendingIndexAsync<TDocument>(Expression<Func<TDocument, object>> field, IndexCreationOptions indexCreationOptions = null, string partitionKey = null)
|
|
||||||
where TDocument : IDocument<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Creates a hashed index on the given field.
|
|
||||||
/// IndexCreationOptions can be supplied to further specify
|
|
||||||
/// how the creation should be done.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <param name="field">The field we want to index.</param>
|
|
||||||
/// <param name="indexCreationOptions">Options for creating an index.</param>
|
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
|
||||||
/// <returns>The result of the create index operation.</returns>
|
|
||||||
Task<string> CreateHashedIndexAsync<TDocument>(Expression<Func<TDocument, object>> field, IndexCreationOptions indexCreationOptions = null, string partitionKey = null)
|
|
||||||
where TDocument : IDocument<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Creates a combined text index.
|
|
||||||
/// IndexCreationOptions can be supplied to further specify
|
|
||||||
/// how the creation should be done.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <param name="fields">The fields we want to index.</param>
|
|
||||||
/// <param name="indexCreationOptions">Options for creating an index.</param>
|
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
|
||||||
/// <returns>The result of the create index operation.</returns>
|
|
||||||
Task<string> CreateCombinedTextIndexAsync<TDocument>(IEnumerable<Expression<Func<TDocument, object>>> fields, IndexCreationOptions indexCreationOptions = null, string partitionKey = null)
|
|
||||||
where TDocument : IDocument<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Drops the index given a field name
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <param name="indexName">The name of the index</param>
|
|
||||||
/// <param name="partitionKey">An optional partition key</param>
|
|
||||||
Task DropIndexAsync<TDocument>(string indexName, string partitionKey = null)
|
|
||||||
where TDocument : IDocument<TKey>;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The base Repository, it is meant to be inherited from by your custom custom MongoRepository implementation.
|
/// 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.
|
/// Its constructor must be given a connection string and a database name.
|
||||||
@@ -104,12 +14,12 @@ namespace MongoDbGenericRepository
|
|||||||
public abstract partial class BaseMongoRepository<TKey> : IBaseMongoRepository_Index<TKey>
|
public abstract partial class BaseMongoRepository<TKey> : IBaseMongoRepository_Index<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
{
|
{
|
||||||
private MongoDbIndexHandler _mongoDbIndexHandler;
|
private volatile IMongoDbIndexHandler _mongoDbIndexHandler;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The MongoDb accessor to manage indexes.
|
/// The MongoDb accessor to manage indexes.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected virtual MongoDbIndexHandler MongoDbIndexHandler
|
protected virtual IMongoDbIndexHandler MongoDbIndexHandler
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
@@ -122,6 +32,7 @@ namespace MongoDbGenericRepository
|
|||||||
_mongoDbIndexHandler = new MongoDbIndexHandler(MongoDbContext);
|
_mongoDbIndexHandler = new MongoDbIndexHandler(MongoDbContext);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return _mongoDbIndexHandler;
|
return _mongoDbIndexHandler;
|
||||||
}
|
}
|
||||||
set { _mongoDbIndexHandler = value; }
|
set { _mongoDbIndexHandler = value; }
|
||||||
|
|||||||
@@ -4,20 +4,6 @@ using System;
|
|||||||
|
|
||||||
namespace MongoDbGenericRepository
|
namespace MongoDbGenericRepository
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
/// The interface exposing all the CRUD and Index functionalities for Key typed repositories.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TKey">The type of the document Id.</typeparam>
|
|
||||||
public interface IBaseMongoRepository<TKey> :
|
|
||||||
IReadOnlyMongoRepository<TKey>,
|
|
||||||
IBaseMongoRepository_Create<TKey>,
|
|
||||||
IBaseMongoRepository_Delete<TKey>,
|
|
||||||
IBaseMongoRepository_Index<TKey>,
|
|
||||||
IBaseMongoRepository_Update<TKey>
|
|
||||||
where TKey : IEquatable<TKey>
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The base Repository, it is meant to be inherited from by your custom custom MongoRepository implementation.
|
/// 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.
|
/// Its constructor must be given a connection string and a database name.
|
||||||
@@ -41,7 +27,7 @@ namespace MongoDbGenericRepository
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The contructor taking a <see cref="IMongoDbContext"/>.
|
/// The constructor taking a <see cref="IMongoDbContext"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="mongoDbContext">A mongodb context implementing <see cref="IMongoDbContext"/></param>
|
/// <param name="mongoDbContext">A mongodb context implementing <see cref="IMongoDbContext"/></param>
|
||||||
protected BaseMongoRepository(IMongoDbContext mongoDbContext) : base(mongoDbContext)
|
protected BaseMongoRepository(IMongoDbContext mongoDbContext) : base(mongoDbContext)
|
||||||
@@ -49,7 +35,7 @@ namespace MongoDbGenericRepository
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The contructor taking a <see cref="IMongoDatabase"/>.
|
/// The constructor taking a <see cref="IMongoDatabase"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="mongoDatabase">A mongodb context implementing <see cref="IMongoDatabase"/></param>
|
/// <param name="mongoDatabase">A mongodb context implementing <see cref="IMongoDatabase"/></param>
|
||||||
protected BaseMongoRepository(IMongoDatabase mongoDatabase) : base(mongoDatabase)
|
protected BaseMongoRepository(IMongoDatabase mongoDatabase) : base(mongoDatabase)
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ namespace MongoDbGenericRepository
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// A MongoDb Reader for read operations
|
/// A MongoDb Reader for read operations
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected MongoDbReader MongoDbReader = null;
|
protected IMongoDbReader MongoDbReader = null;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The constructor taking a connection string and a database name.
|
/// The constructor taking a connection string and a database name.
|
||||||
@@ -47,7 +47,7 @@ namespace MongoDbGenericRepository
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The contructor taking a <see cref="IMongoDatabase"/>.
|
/// The constructor taking a <see cref="IMongoDatabase"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="mongoDatabase">A mongodb context implementing <see cref="IMongoDatabase"/></param>
|
/// <param name="mongoDatabase">A mongodb context implementing <see cref="IMongoDatabase"/></param>
|
||||||
protected ReadOnlyMongoRepository(IMongoDatabase mongoDatabase) : this(new MongoDbContext(mongoDatabase))
|
protected ReadOnlyMongoRepository(IMongoDatabase mongoDatabase) : this(new MongoDbContext(mongoDatabase))
|
||||||
@@ -55,7 +55,7 @@ namespace MongoDbGenericRepository
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The contructor taking a <see cref="IMongoDbContext"/>.
|
/// The constructor taking a <see cref="IMongoDbContext"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="mongoDbContext">A mongodb context implementing <see cref="IMongoDbContext"/></param>
|
/// <param name="mongoDbContext">A mongodb context implementing <see cref="IMongoDbContext"/></param>
|
||||||
protected ReadOnlyMongoRepository(IMongoDbContext mongoDbContext)
|
protected ReadOnlyMongoRepository(IMongoDbContext mongoDbContext)
|
||||||
|
|||||||
@@ -7,204 +7,12 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace MongoDbGenericRepository
|
namespace MongoDbGenericRepository
|
||||||
{
|
{
|
||||||
public interface IBaseMongoRepository_Update<TKey> where TKey : IEquatable<TKey>
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Asynchronously Updates a document.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <param name="modifiedDocument">The document with the modifications you want to persist.</param>
|
|
||||||
Task<bool> UpdateOneAsync<TDocument>(TDocument modifiedDocument) where TDocument : IDocument<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Updates a document.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <param name="modifiedDocument">The document with the modifications you want to persist.</param>
|
|
||||||
bool UpdateOne<TDocument>(TDocument modifiedDocument) where TDocument : IDocument<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Takes a document you want to modify and applies the update you have defined in MongoDb.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <param name="documentToModify">The document you want to modify.</param>
|
|
||||||
/// <param name="update">The update definition for the document.</param>
|
|
||||||
Task<bool> UpdateOneAsync<TDocument>(TDocument documentToModify, UpdateDefinition<TDocument> update)
|
|
||||||
where TDocument : IDocument<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Takes a document you want to modify and applies the update you have defined in MongoDb.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <param name="documentToModify">The document you want to modify.</param>
|
|
||||||
/// <param name="update">The update definition for the document.</param>
|
|
||||||
bool UpdateOne<TDocument>(TDocument documentToModify, UpdateDefinition<TDocument> update)
|
|
||||||
where TDocument : IDocument<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Updates the property field with the given value update a property field in entities.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <typeparam name="TField">The type of the field.</typeparam>
|
|
||||||
/// <param name="documentToModify">The document you want to modify.</param>
|
|
||||||
/// <param name="field">The field selector.</param>
|
|
||||||
/// <param name="value">The new value of the property field.</param>
|
|
||||||
bool UpdateOne<TDocument, TField>(TDocument documentToModify, Expression<Func<TDocument, TField>> field, TField value)
|
|
||||||
where TDocument : IDocument<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Updates the property field with the given value update a property field in entities.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <typeparam name="TField">The type of the field.</typeparam>
|
|
||||||
/// <param name="documentToModify">The document you want to modify.</param>
|
|
||||||
/// <param name="field">The field selector.</param>
|
|
||||||
/// <param name="value">The new value of the property field.</param>
|
|
||||||
Task<bool> UpdateOneAsync<TDocument, TField>(TDocument documentToModify, Expression<Func<TDocument, TField>> field, TField value)
|
|
||||||
where TDocument : IDocument<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Updates the property field with the given value update a property field in entities.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <typeparam name="TField">The type of the field.</typeparam>
|
|
||||||
/// <param name="filter">The document filter.</param>
|
|
||||||
/// <param name="field">The field selector.</param>
|
|
||||||
/// <param name="value">The new value of the property field.</param>
|
|
||||||
/// <param name="partitionKey">The value of the partition key.</param>
|
|
||||||
bool UpdateOne<TDocument, TField>(FilterDefinition<TDocument> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null)
|
|
||||||
where TDocument : IDocument<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// For the entity selected by the filter, updates the property field with the given value.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <typeparam name="TField">The type of the field.</typeparam>
|
|
||||||
/// <param name="filter">The document filter.</param>
|
|
||||||
/// <param name="field">The field selector.</param>
|
|
||||||
/// <param name="value">The new value of the property field.</param>
|
|
||||||
/// <param name="partitionKey">The partition key for the document.</param>
|
|
||||||
bool UpdateOne<TDocument, TField>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null)
|
|
||||||
where TDocument : IDocument<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Updates the property field with the given value update a property field in entities.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <typeparam name="TField">The type of the field.</typeparam>
|
|
||||||
/// <param name="filter">The document filter.</param>
|
|
||||||
/// <param name="field">The field selector.</param>
|
|
||||||
/// <param name="value">The new value of the property field.</param>
|
|
||||||
/// <param name="partitionKey">The value of the partition key.</param>
|
|
||||||
Task<bool> UpdateOneAsync<TDocument, TField>(FilterDefinition<TDocument> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null)
|
|
||||||
where TDocument : IDocument<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// For the entity selected by the filter, updates the property field with the given value.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <typeparam name="TField">The type of the field.</typeparam>
|
|
||||||
/// <param name="filter">The document filter.</param>
|
|
||||||
/// <param name="field">The field selector.</param>
|
|
||||||
/// <param name="value">The new value of the property field.</param>
|
|
||||||
/// <param name="partitionKey">The partition key for the document.</param>
|
|
||||||
Task<bool> UpdateOneAsync<TDocument, TField>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null)
|
|
||||||
where TDocument : IDocument<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// For the entities selected by the filter, updates the property field with the given value.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <typeparam name="TField">The type of the field.</typeparam>
|
|
||||||
/// <param name="filter">The document filter.</param>
|
|
||||||
/// <param name="field">The field selector.</param>
|
|
||||||
/// <param name="value">The new value of the property field.</param>
|
|
||||||
/// <param name="partitionKey">The partition key for the document.</param>
|
|
||||||
Task<long> UpdateManyAsync<TDocument, TField>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null)
|
|
||||||
where TDocument : IDocument<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// For the entities selected by the filter, updates the property field with the given value.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <typeparam name="TField">The type of the field.</typeparam>
|
|
||||||
/// <param name="filter">The document filter.</param>
|
|
||||||
/// <param name="field">The field selector.</param>
|
|
||||||
/// <param name="value">The new value of the property field.</param>
|
|
||||||
/// <param name="partitionKey">The value of the partition key.</param>
|
|
||||||
Task<long> UpdateManyAsync<TDocument, TField>(FilterDefinition<TDocument> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null)
|
|
||||||
where TDocument : IDocument<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// For the entities selected by the filter, applies the update you have defined in MongoDb.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <param name="filter">The document filter.</param>
|
|
||||||
/// <param name="updateDefinition">The update definition to apply.</param>
|
|
||||||
/// <param name="partitionKey">The value of the partition key.</param>
|
|
||||||
Task<long> UpdateManyAsync<TDocument>(FilterDefinition<TDocument> filter, UpdateDefinition<TDocument> updateDefinition, string partitionKey = null)
|
|
||||||
where TDocument : IDocument<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// For the entities selected by the filter, applies the update you have defined in MongoDb.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <param name="filter">The document filter.</param>
|
|
||||||
/// <param name="updateDefinition">The update definition to apply.</param>
|
|
||||||
/// <param name="partitionKey">The value of the partition key.</param>
|
|
||||||
Task<long> UpdateManyAsync<TDocument>(Expression<Func<TDocument, bool>> filter, UpdateDefinition<TDocument> updateDefinition, string partitionKey = null)
|
|
||||||
where TDocument : IDocument<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// For the entities selected by the filter, updates the property field with the given value.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <typeparam name="TField">The type of the field.</typeparam>
|
|
||||||
/// <param name="filter">The document filter.</param>
|
|
||||||
/// <param name="field">The field selector.</param>
|
|
||||||
/// <param name="value">The new value of the property field.</param>
|
|
||||||
/// <param name="partitionKey">The partition key for the document.</param>
|
|
||||||
long UpdateMany<TDocument, TField>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null)
|
|
||||||
where TDocument : IDocument<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// For the entities selected by the filter, updates the property field with the given value.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <typeparam name="TField">The type of the field.</typeparam>
|
|
||||||
/// <param name="filter">The document filter.</param>
|
|
||||||
/// <param name="field">The field selector.</param>
|
|
||||||
/// <param name="value">The new value of the property field.</param>
|
|
||||||
/// <param name="partitionKey">The value of the partition key.</param>
|
|
||||||
long UpdateMany<TDocument, TField>(FilterDefinition<TDocument> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null)
|
|
||||||
where TDocument : IDocument<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// For the entities selected by the filter, applies the update you have defined in MongoDb.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <param name="filter">The document filter.</param>
|
|
||||||
/// <param name="updateDefinition">The update definition to apply.</param>
|
|
||||||
/// <param name="partitionKey">The value of the partition key.</param>
|
|
||||||
long UpdateMany<TDocument>(FilterDefinition<TDocument> filter, UpdateDefinition<TDocument> updateDefinition, string partitionKey = null)
|
|
||||||
where TDocument : IDocument<TKey>;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// For the entities selected by the filter, applies the update you have defined in MongoDb.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
|
||||||
/// <param name="filter">The document filter.</param>
|
|
||||||
/// <param name="updateDefinition">The update definition to apply.</param>
|
|
||||||
/// <param name="partitionKey">The value of the partition key.</param>
|
|
||||||
long UpdateMany<TDocument>(Expression<Func<TDocument, bool>> filter, UpdateDefinition<TDocument> updateDefinition, string partitionKey = null)
|
|
||||||
where TDocument : IDocument<TKey>;
|
|
||||||
}
|
|
||||||
|
|
||||||
public abstract partial class BaseMongoRepository<TKey> : IBaseMongoRepository_Update<TKey>
|
public abstract partial class BaseMongoRepository<TKey> : IBaseMongoRepository_Update<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
{
|
{
|
||||||
private MongoDbUpdater _mongoDbUpdater;
|
private volatile IMongoDbUpdater _mongoDbUpdater;
|
||||||
protected virtual MongoDbUpdater MongoDbUpdater
|
|
||||||
|
protected virtual IMongoDbUpdater MongoDbUpdater
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using MongoDbGenericRepository.Models;
|
||||||
|
|
||||||
|
namespace MongoDbGenericRepository
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The interface exposing data insertion functionality for Key typed repositories.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TKey"></typeparam>
|
||||||
|
public interface IBaseMongoRepository_Create<TKey> where TKey : IEquatable<TKey>
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Asynchronously adds a document to the collection.
|
||||||
|
/// Populates the Id and AddedAtUtc fields if necessary.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <param name="document">The document you want to add.</param>
|
||||||
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
Task AddOneAsync<TDocument>(TDocument document, CancellationToken cancellationToken = default) where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Adds a document to the collection.
|
||||||
|
/// Populates the Id and AddedAtUtc fields if necessary.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <param name="document">The document you want to add.</param>
|
||||||
|
void AddOne<TDocument>(TDocument document) where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Asynchronously adds a list of documents to the collection.
|
||||||
|
/// Populates the Id and AddedAtUtc fields if necessary.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <param name="documents">The documents you want to add.</param>
|
||||||
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
Task AddManyAsync<TDocument>(IEnumerable<TDocument> documents, CancellationToken cancellationToken = default) where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Adds a list of documents to the collection.
|
||||||
|
/// Populates the Id and AddedAtUtc fields if necessary.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <param name="documents">The documents you want to add.</param>
|
||||||
|
void AddMany<TDocument>(IEnumerable<TDocument> documents) where TDocument : IDocument<TKey>;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,91 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using MongoDbGenericRepository.Models;
|
||||||
|
|
||||||
|
namespace MongoDbGenericRepository
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The interface exposing deletion functionality for Key typed repositories.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TKey">The type of the document Id.</typeparam>
|
||||||
|
public interface IBaseMongoRepository_Delete<TKey> where TKey : IEquatable<TKey>
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Deletes a document.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <param name="document">The document you want to delete.</param>
|
||||||
|
/// <returns>The number of documents deleted.</returns>
|
||||||
|
long DeleteOne<TDocument>(TDocument document)
|
||||||
|
where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Asynchronously deletes a document matching the condition of the LINQ expression filter.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <param name="document">The document you want to delete.</param>
|
||||||
|
/// <returns>The number of documents deleted.</returns>
|
||||||
|
Task<long> DeleteOneAsync<TDocument>(TDocument document)
|
||||||
|
where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Deletes a document matching the condition of the LINQ expression filter.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <returns>The number of documents deleted.</returns>
|
||||||
|
long DeleteOne<TDocument>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Asynchronously deletes a document matching the condition of the LINQ expression filter.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <returns>The number of documents deleted.</returns>
|
||||||
|
Task<long> DeleteOneAsync<TDocument>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Asynchronously deletes the documents matching the condition of the LINQ expression filter.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <returns>The number of documents deleted.</returns>
|
||||||
|
Task<long> DeleteManyAsync<TDocument>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Asynchronously deletes a list of documents.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <param name="documents">The list of documents to delete.</param>
|
||||||
|
/// <returns>The number of documents deleted.</returns>
|
||||||
|
Task<long> DeleteManyAsync<TDocument>(IEnumerable<TDocument> documents)
|
||||||
|
where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Deletes a list of documents.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <param name="documents">The list of documents to delete.</param>
|
||||||
|
/// <returns>The number of documents deleted.</returns>
|
||||||
|
long DeleteMany<TDocument>(IEnumerable<TDocument> documents)
|
||||||
|
where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Deletes the documents matching the condition of the LINQ expression filter.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <returns>The number of documents deleted.</returns>
|
||||||
|
long DeleteMany<TDocument>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,98 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using MongoDbGenericRepository.Models;
|
||||||
|
|
||||||
|
namespace MongoDbGenericRepository
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The interface exposing index management functionality for Key typed repositories.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TKey"></typeparam>
|
||||||
|
public interface IBaseMongoRepository_Index<TKey> where TKey : IEquatable<TKey>
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the names of the indexes present on a collection.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <param name="partitionKey">An optional partition key</param>
|
||||||
|
/// <returns>A list containing the names of the indexes on on the concerned collection.</returns>
|
||||||
|
Task<List<string>> GetIndexesNamesAsync<TDocument>(string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Create a text index on the given field.
|
||||||
|
/// IndexCreationOptions can be supplied to further specify
|
||||||
|
/// how the creation should be done.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <param name="field">The field we want to index.</param>
|
||||||
|
/// <param name="indexCreationOptions">Options for creating an index.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <returns>The result of the create index operation.</returns>
|
||||||
|
Task<string> CreateTextIndexAsync<TDocument>(Expression<Func<TDocument, object>> field, IndexCreationOptions indexCreationOptions = null, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates an index on the given field in ascending order.
|
||||||
|
/// IndexCreationOptions can be supplied to further specify
|
||||||
|
/// how the creation should be done.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <param name="field">The field we want to index.</param>
|
||||||
|
/// <param name="indexCreationOptions">Options for creating an index.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <returns>The result of the create index operation.</returns>
|
||||||
|
Task<string> CreateAscendingIndexAsync<TDocument>(Expression<Func<TDocument, object>> field, IndexCreationOptions indexCreationOptions = null, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates an index on the given field in descending order.
|
||||||
|
/// IndexCreationOptions can be supplied to further specify
|
||||||
|
/// how the creation should be done.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <param name="field">The field we want to index.</param>
|
||||||
|
/// <param name="indexCreationOptions">Options for creating an index.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <returns>The result of the create index operation.</returns>
|
||||||
|
Task<string> CreateDescendingIndexAsync<TDocument>(Expression<Func<TDocument, object>> field, IndexCreationOptions indexCreationOptions = null, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a hashed index on the given field.
|
||||||
|
/// IndexCreationOptions can be supplied to further specify
|
||||||
|
/// how the creation should be done.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <param name="field">The field we want to index.</param>
|
||||||
|
/// <param name="indexCreationOptions">Options for creating an index.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <returns>The result of the create index operation.</returns>
|
||||||
|
Task<string> CreateHashedIndexAsync<TDocument>(Expression<Func<TDocument, object>> field, IndexCreationOptions indexCreationOptions = null, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a combined text index.
|
||||||
|
/// IndexCreationOptions can be supplied to further specify
|
||||||
|
/// how the creation should be done.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <param name="fields">The fields we want to index.</param>
|
||||||
|
/// <param name="indexCreationOptions">Options for creating an index.</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <returns>The result of the create index operation.</returns>
|
||||||
|
Task<string> CreateCombinedTextIndexAsync<TDocument>(IEnumerable<Expression<Func<TDocument, object>>> fields, IndexCreationOptions indexCreationOptions = null, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Drops the index given a field name
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <param name="indexName">The name of the index</param>
|
||||||
|
/// <param name="partitionKey">An optional partition key</param>
|
||||||
|
Task DropIndexAsync<TDocument>(string indexName, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,201 @@
|
|||||||
|
using System;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using MongoDB.Driver;
|
||||||
|
using MongoDbGenericRepository.Models;
|
||||||
|
|
||||||
|
namespace MongoDbGenericRepository
|
||||||
|
{
|
||||||
|
public interface IBaseMongoRepository_Update<TKey> where TKey : IEquatable<TKey>
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Asynchronously Updates a document.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <param name="modifiedDocument">The document with the modifications you want to persist.</param>
|
||||||
|
Task<bool> UpdateOneAsync<TDocument>(TDocument modifiedDocument) where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Updates a document.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <param name="modifiedDocument">The document with the modifications you want to persist.</param>
|
||||||
|
bool UpdateOne<TDocument>(TDocument modifiedDocument) where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Takes a document you want to modify and applies the update you have defined in MongoDb.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <param name="documentToModify">The document you want to modify.</param>
|
||||||
|
/// <param name="update">The update definition for the document.</param>
|
||||||
|
Task<bool> UpdateOneAsync<TDocument>(TDocument documentToModify, UpdateDefinition<TDocument> update)
|
||||||
|
where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Takes a document you want to modify and applies the update you have defined in MongoDb.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <param name="documentToModify">The document you want to modify.</param>
|
||||||
|
/// <param name="update">The update definition for the document.</param>
|
||||||
|
bool UpdateOne<TDocument>(TDocument documentToModify, UpdateDefinition<TDocument> update)
|
||||||
|
where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Updates the property field with the given value update a property field in entities.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TField">The type of the field.</typeparam>
|
||||||
|
/// <param name="documentToModify">The document you want to modify.</param>
|
||||||
|
/// <param name="field">The field selector.</param>
|
||||||
|
/// <param name="value">The new value of the property field.</param>
|
||||||
|
bool UpdateOne<TDocument, TField>(TDocument documentToModify, Expression<Func<TDocument, TField>> field, TField value)
|
||||||
|
where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Updates the property field with the given value update a property field in entities.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TField">The type of the field.</typeparam>
|
||||||
|
/// <param name="documentToModify">The document you want to modify.</param>
|
||||||
|
/// <param name="field">The field selector.</param>
|
||||||
|
/// <param name="value">The new value of the property field.</param>
|
||||||
|
Task<bool> UpdateOneAsync<TDocument, TField>(TDocument documentToModify, Expression<Func<TDocument, TField>> field, TField value)
|
||||||
|
where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Updates the property field with the given value update a property field in entities.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TField">The type of the field.</typeparam>
|
||||||
|
/// <param name="filter">The document filter.</param>
|
||||||
|
/// <param name="field">The field selector.</param>
|
||||||
|
/// <param name="value">The new value of the property field.</param>
|
||||||
|
/// <param name="partitionKey">The value of the partition key.</param>
|
||||||
|
bool UpdateOne<TDocument, TField>(FilterDefinition<TDocument> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// For the entity selected by the filter, updates the property field with the given value.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TField">The type of the field.</typeparam>
|
||||||
|
/// <param name="filter">The document filter.</param>
|
||||||
|
/// <param name="field">The field selector.</param>
|
||||||
|
/// <param name="value">The new value of the property field.</param>
|
||||||
|
/// <param name="partitionKey">The partition key for the document.</param>
|
||||||
|
bool UpdateOne<TDocument, TField>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Updates the property field with the given value update a property field in entities.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TField">The type of the field.</typeparam>
|
||||||
|
/// <param name="filter">The document filter.</param>
|
||||||
|
/// <param name="field">The field selector.</param>
|
||||||
|
/// <param name="value">The new value of the property field.</param>
|
||||||
|
/// <param name="partitionKey">The value of the partition key.</param>
|
||||||
|
Task<bool> UpdateOneAsync<TDocument, TField>(FilterDefinition<TDocument> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// For the entity selected by the filter, updates the property field with the given value.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TField">The type of the field.</typeparam>
|
||||||
|
/// <param name="filter">The document filter.</param>
|
||||||
|
/// <param name="field">The field selector.</param>
|
||||||
|
/// <param name="value">The new value of the property field.</param>
|
||||||
|
/// <param name="partitionKey">The partition key for the document.</param>
|
||||||
|
Task<bool> UpdateOneAsync<TDocument, TField>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// For the entities selected by the filter, updates the property field with the given value.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TField">The type of the field.</typeparam>
|
||||||
|
/// <param name="filter">The document filter.</param>
|
||||||
|
/// <param name="field">The field selector.</param>
|
||||||
|
/// <param name="value">The new value of the property field.</param>
|
||||||
|
/// <param name="partitionKey">The partition key for the document.</param>
|
||||||
|
Task<long> UpdateManyAsync<TDocument, TField>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// For the entities selected by the filter, updates the property field with the given value.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TField">The type of the field.</typeparam>
|
||||||
|
/// <param name="filter">The document filter.</param>
|
||||||
|
/// <param name="field">The field selector.</param>
|
||||||
|
/// <param name="value">The new value of the property field.</param>
|
||||||
|
/// <param name="partitionKey">The value of the partition key.</param>
|
||||||
|
Task<long> UpdateManyAsync<TDocument, TField>(FilterDefinition<TDocument> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// For the entities selected by the filter, applies the update you have defined in MongoDb.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <param name="filter">The document filter.</param>
|
||||||
|
/// <param name="updateDefinition">The update definition to apply.</param>
|
||||||
|
/// <param name="partitionKey">The value of the partition key.</param>
|
||||||
|
Task<long> UpdateManyAsync<TDocument>(FilterDefinition<TDocument> filter, UpdateDefinition<TDocument> updateDefinition, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// For the entities selected by the filter, applies the update you have defined in MongoDb.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <param name="filter">The document filter.</param>
|
||||||
|
/// <param name="updateDefinition">The update definition to apply.</param>
|
||||||
|
/// <param name="partitionKey">The value of the partition key.</param>
|
||||||
|
Task<long> UpdateManyAsync<TDocument>(Expression<Func<TDocument, bool>> filter, UpdateDefinition<TDocument> updateDefinition, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// For the entities selected by the filter, updates the property field with the given value.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TField">The type of the field.</typeparam>
|
||||||
|
/// <param name="filter">The document filter.</param>
|
||||||
|
/// <param name="field">The field selector.</param>
|
||||||
|
/// <param name="value">The new value of the property field.</param>
|
||||||
|
/// <param name="partitionKey">The partition key for the document.</param>
|
||||||
|
long UpdateMany<TDocument, TField>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// For the entities selected by the filter, updates the property field with the given value.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <typeparam name="TField">The type of the field.</typeparam>
|
||||||
|
/// <param name="filter">The document filter.</param>
|
||||||
|
/// <param name="field">The field selector.</param>
|
||||||
|
/// <param name="value">The new value of the property field.</param>
|
||||||
|
/// <param name="partitionKey">The value of the partition key.</param>
|
||||||
|
long UpdateMany<TDocument, TField>(FilterDefinition<TDocument> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// For the entities selected by the filter, applies the update you have defined in MongoDb.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <param name="filter">The document filter.</param>
|
||||||
|
/// <param name="updateDefinition">The update definition to apply.</param>
|
||||||
|
/// <param name="partitionKey">The value of the partition key.</param>
|
||||||
|
long UpdateMany<TDocument>(FilterDefinition<TDocument> filter, UpdateDefinition<TDocument> updateDefinition, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// For the entities selected by the filter, applies the update you have defined in MongoDb.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
|
/// <param name="filter">The document filter.</param>
|
||||||
|
/// <param name="updateDefinition">The update definition to apply.</param>
|
||||||
|
/// <param name="partitionKey">The value of the partition key.</param>
|
||||||
|
long UpdateMany<TDocument>(Expression<Func<TDocument, bool>> filter, UpdateDefinition<TDocument> updateDefinition, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace MongoDbGenericRepository
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The interface exposing all the CRUD and Index functionalities for Key typed repositories.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TKey">The type of the document Id.</typeparam>
|
||||||
|
public interface IBaseMongoRepository<TKey> :
|
||||||
|
IReadOnlyMongoRepository<TKey>,
|
||||||
|
IBaseMongoRepository_Create<TKey>,
|
||||||
|
IBaseMongoRepository_Delete<TKey>,
|
||||||
|
IBaseMongoRepository_Index<TKey>,
|
||||||
|
IBaseMongoRepository_Update<TKey>
|
||||||
|
where TKey : IEquatable<TKey>
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>net472;netstandard2.0;</TargetFrameworks>
|
<TargetFrameworks>netstandard2.1;net48</TargetFrameworks>
|
||||||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||||
<PackageId>MongoDbGenericRepository</PackageId>
|
<PackageId>MongoDbGenericRepository</PackageId>
|
||||||
<PackageVersion>1.4.8</PackageVersion>
|
<PackageVersion>1.4.8</PackageVersion>
|
||||||
|
|||||||
@@ -2364,13 +2364,13 @@
|
|||||||
</member>
|
</member>
|
||||||
<member name="M:MongoDbGenericRepository.BaseMongoRepository.#ctor(MongoDbGenericRepository.IMongoDbContext)">
|
<member name="M:MongoDbGenericRepository.BaseMongoRepository.#ctor(MongoDbGenericRepository.IMongoDbContext)">
|
||||||
<summary>
|
<summary>
|
||||||
The contructor taking a <see cref="T:MongoDbGenericRepository.IMongoDbContext"/>.
|
The constructor taking a <see cref="T:MongoDbGenericRepository.IMongoDbContext"/>.
|
||||||
</summary>
|
</summary>
|
||||||
<param name="mongoDbContext">A mongodb context implementing <see cref="T:MongoDbGenericRepository.IMongoDbContext"/></param>
|
<param name="mongoDbContext">A mongodb context implementing <see cref="T:MongoDbGenericRepository.IMongoDbContext"/></param>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:MongoDbGenericRepository.BaseMongoRepository.#ctor(MongoDB.Driver.IMongoDatabase)">
|
<member name="M:MongoDbGenericRepository.BaseMongoRepository.#ctor(MongoDB.Driver.IMongoDatabase)">
|
||||||
<summary>
|
<summary>
|
||||||
The contructor taking a <see cref="T:MongoDB.Driver.IMongoDatabase"/>.
|
The constructor taking a <see cref="T:MongoDB.Driver.IMongoDatabase"/>.
|
||||||
</summary>
|
</summary>
|
||||||
<param name="mongoDatabase">A mongodb context implementing <see cref="T:MongoDB.Driver.IMongoDatabase"/></param>
|
<param name="mongoDatabase">A mongodb context implementing <see cref="T:MongoDB.Driver.IMongoDatabase"/></param>
|
||||||
</member>
|
</member>
|
||||||
@@ -3360,13 +3360,13 @@
|
|||||||
</member>
|
</member>
|
||||||
<member name="M:MongoDbGenericRepository.BaseMongoRepository`1.#ctor(MongoDbGenericRepository.IMongoDbContext)">
|
<member name="M:MongoDbGenericRepository.BaseMongoRepository`1.#ctor(MongoDbGenericRepository.IMongoDbContext)">
|
||||||
<summary>
|
<summary>
|
||||||
The contructor taking a <see cref="T:MongoDbGenericRepository.IMongoDbContext"/>.
|
The constructor taking a <see cref="T:MongoDbGenericRepository.IMongoDbContext"/>.
|
||||||
</summary>
|
</summary>
|
||||||
<param name="mongoDbContext">A mongodb context implementing <see cref="T:MongoDbGenericRepository.IMongoDbContext"/></param>
|
<param name="mongoDbContext">A mongodb context implementing <see cref="T:MongoDbGenericRepository.IMongoDbContext"/></param>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:MongoDbGenericRepository.BaseMongoRepository`1.#ctor(MongoDB.Driver.IMongoDatabase)">
|
<member name="M:MongoDbGenericRepository.BaseMongoRepository`1.#ctor(MongoDB.Driver.IMongoDatabase)">
|
||||||
<summary>
|
<summary>
|
||||||
The contructor taking a <see cref="T:MongoDB.Driver.IMongoDatabase"/>.
|
The constructor taking a <see cref="T:MongoDB.Driver.IMongoDatabase"/>.
|
||||||
</summary>
|
</summary>
|
||||||
<param name="mongoDatabase">A mongodb context implementing <see cref="T:MongoDB.Driver.IMongoDatabase"/></param>
|
<param name="mongoDatabase">A mongodb context implementing <see cref="T:MongoDB.Driver.IMongoDatabase"/></param>
|
||||||
</member>
|
</member>
|
||||||
@@ -3757,13 +3757,13 @@
|
|||||||
</member>
|
</member>
|
||||||
<member name="M:MongoDbGenericRepository.ReadOnlyMongoRepository`1.#ctor(MongoDB.Driver.IMongoDatabase)">
|
<member name="M:MongoDbGenericRepository.ReadOnlyMongoRepository`1.#ctor(MongoDB.Driver.IMongoDatabase)">
|
||||||
<summary>
|
<summary>
|
||||||
The contructor taking a <see cref="T:MongoDB.Driver.IMongoDatabase"/>.
|
The constructor taking a <see cref="T:MongoDB.Driver.IMongoDatabase"/>.
|
||||||
</summary>
|
</summary>
|
||||||
<param name="mongoDatabase">A mongodb context implementing <see cref="T:MongoDB.Driver.IMongoDatabase"/></param>
|
<param name="mongoDatabase">A mongodb context implementing <see cref="T:MongoDB.Driver.IMongoDatabase"/></param>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:MongoDbGenericRepository.ReadOnlyMongoRepository`1.#ctor(MongoDbGenericRepository.IMongoDbContext)">
|
<member name="M:MongoDbGenericRepository.ReadOnlyMongoRepository`1.#ctor(MongoDbGenericRepository.IMongoDbContext)">
|
||||||
<summary>
|
<summary>
|
||||||
The contructor taking a <see cref="T:MongoDbGenericRepository.IMongoDbContext"/>.
|
The constructor taking a <see cref="T:MongoDbGenericRepository.IMongoDbContext"/>.
|
||||||
</summary>
|
</summary>
|
||||||
<param name="mongoDbContext">A mongodb context implementing <see cref="T:MongoDbGenericRepository.IMongoDbContext"/></param>
|
<param name="mongoDbContext">A mongodb context implementing <see cref="T:MongoDbGenericRepository.IMongoDbContext"/></param>
|
||||||
</member>
|
</member>
|
||||||
@@ -4492,13 +4492,13 @@
|
|||||||
</member>
|
</member>
|
||||||
<member name="M:MongoDbGenericRepository.ReadOnlyMongoRepository.#ctor(MongoDbGenericRepository.IMongoDbContext)">
|
<member name="M:MongoDbGenericRepository.ReadOnlyMongoRepository.#ctor(MongoDbGenericRepository.IMongoDbContext)">
|
||||||
<summary>
|
<summary>
|
||||||
The contructor taking a <see cref="T:MongoDbGenericRepository.IMongoDbContext"/>.
|
The constructor taking a <see cref="T:MongoDbGenericRepository.IMongoDbContext"/>.
|
||||||
</summary>
|
</summary>
|
||||||
<param name="mongoDbContext">A mongodb context implementing <see cref="T:MongoDbGenericRepository.IMongoDbContext"/></param>
|
<param name="mongoDbContext">A mongodb context implementing <see cref="T:MongoDbGenericRepository.IMongoDbContext"/></param>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:MongoDbGenericRepository.ReadOnlyMongoRepository.#ctor(MongoDB.Driver.IMongoDatabase)">
|
<member name="M:MongoDbGenericRepository.ReadOnlyMongoRepository.#ctor(MongoDB.Driver.IMongoDatabase)">
|
||||||
<summary>
|
<summary>
|
||||||
The contructor taking a <see cref="T:MongoDB.Driver.IMongoDatabase"/>.
|
The constructor taking a <see cref="T:MongoDB.Driver.IMongoDatabase"/>.
|
||||||
</summary>
|
</summary>
|
||||||
<param name="mongoDatabase">A mongodb context implementing <see cref="T:MongoDB.Driver.IMongoDatabase"/></param>
|
<param name="mongoDatabase">A mongodb context implementing <see cref="T:MongoDB.Driver.IMongoDatabase"/></param>
|
||||||
</member>
|
</member>
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ namespace MongoDbGenericRepository
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The contructor taking a <see cref="IMongoDbContext"/>.
|
/// The constructor taking a <see cref="IMongoDbContext"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="mongoDbContext">A mongodb context implementing <see cref="IMongoDbContext"/></param>
|
/// <param name="mongoDbContext">A mongodb context implementing <see cref="IMongoDbContext"/></param>
|
||||||
protected ReadOnlyMongoRepository(IMongoDbContext mongoDbContext) : base(mongoDbContext)
|
protected ReadOnlyMongoRepository(IMongoDbContext mongoDbContext) : base(mongoDbContext)
|
||||||
@@ -34,7 +34,7 @@ namespace MongoDbGenericRepository
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The contructor taking a <see cref="IMongoDatabase"/>.
|
/// The constructor taking a <see cref="IMongoDatabase"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="mongoDatabase">A mongodb context implementing <see cref="IMongoDatabase"/></param>
|
/// <param name="mongoDatabase">A mongodb context implementing <see cref="IMongoDatabase"/></param>
|
||||||
protected ReadOnlyMongoRepository(IMongoDatabase mongoDatabase) : base(mongoDatabase)
|
protected ReadOnlyMongoRepository(IMongoDatabase mongoDatabase) : base(mongoDatabase)
|
||||||
|
|||||||
Reference in New Issue
Block a user