Compare commits
41 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 71b64c84a0 | |||
| 5f6e015bf2 | |||
| 6d8e358ccc | |||
| 76a1aab671 | |||
| eebdc89575 | |||
| ee4950c5d4 | |||
| 658c753989 | |||
| 0e8d629a8f | |||
| ba3f876f95 | |||
| e4a36e5c60 | |||
| 592c30ed2c | |||
| 83f1d2c7a6 | |||
| ab294d1a5d | |||
| dd8cbe3da7 | |||
| 0844c51566 | |||
| 601c0fd02d | |||
| 91d15312e6 | |||
| 54b2a63a8e | |||
| dbb27aad39 | |||
| afd0308849 | |||
| 9cb35c5881 | |||
| c5390214eb | |||
| ac1fd709a6 | |||
| f6b0aa274b | |||
| 7a82a281fb | |||
| dca01b184c | |||
| b1cda2ac50 | |||
| 8d6b796e7f | |||
| 1a7763a312 | |||
| 77cc85574c | |||
| 846bb16730 | |||
| 5e4cbfa1b3 | |||
| 804dc18c4f | |||
| 182ee0a335 | |||
| bd662d25d6 | |||
| 6c8d4bdafb | |||
| 4d94a1b436 | |||
| d91a644b4a | |||
| 9d1950e9c7 | |||
| 67d0a4c8a3 | |||
| 1826668cea |
@@ -1,4 +1,4 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>netcoreapp2.0</TargetFramework>
|
<TargetFramework>netcoreapp2.0</TargetFramework>
|
||||||
@@ -7,11 +7,13 @@
|
|||||||
<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="Microsoft.NET.Test.Sdk" Version="15.8.0" />
|
<PackageReference Include="MongoDB.Driver" Version="2.12.0" />
|
||||||
<PackageReference Include="MongoDB.Driver" Version="2.7.0" />
|
<PackageReference Include="MongoDbGenericRepository" Version="1.4.6" />
|
||||||
<PackageReference Include="MongoDbGenericRepository" Version="1.3.9" />
|
<PackageReference Include="xunit" Version="2.4.1" />
|
||||||
<PackageReference Include="xunit" Version="2.4.0" />
|
<PackageReference Include="xunit.runner.console" Version="2.4.1">
|
||||||
<PackageReference Include="xunit.runner.console" Version="2.4.0" />
|
<PrivateAssets>all</PrivateAssets>
|
||||||
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
|
||||||
|
</PackageReference>
|
||||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.0" />
|
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.0" />
|
||||||
<DotNetCliToolReference Include="dotnet-xunit" Version="2.3.0-beta4-build3742" />
|
<DotNetCliToolReference Include="dotnet-xunit" Version="2.3.0-beta4-build3742" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|||||||
+1
-155
@@ -12,7 +12,7 @@ using Xunit;
|
|||||||
|
|
||||||
namespace CoreIntegrationTests.Infrastructure
|
namespace CoreIntegrationTests.Infrastructure
|
||||||
{
|
{
|
||||||
public abstract class MongoDbDocumentTestBase<T> :
|
public abstract partial class MongoDbDocumentTestBase<T> :
|
||||||
IClassFixture<MongoDbTestFixture<T, Guid>>
|
IClassFixture<MongoDbTestFixture<T, Guid>>
|
||||||
where T : TestDoc, new()
|
where T : TestDoc, new()
|
||||||
{
|
{
|
||||||
@@ -347,160 +347,6 @@ namespace CoreIntegrationTests.Infrastructure
|
|||||||
|
|
||||||
#endregion Read
|
#endregion Read
|
||||||
|
|
||||||
#region Update
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void UpdateOne()
|
|
||||||
{
|
|
||||||
// Arrange
|
|
||||||
var document = CreateTestDocument();
|
|
||||||
SUT.AddOne<T>(document);
|
|
||||||
var content = GetContent();
|
|
||||||
document.SomeContent = content;
|
|
||||||
// Act
|
|
||||||
var result = SUT.UpdateOne<T>(document);
|
|
||||||
// Assert
|
|
||||||
Assert.True(result);
|
|
||||||
var updatedDocument = SUT.GetById<T>(document.Id, PartitionKey);
|
|
||||||
Assert.True(null != updatedDocument, GetTestName());
|
|
||||||
Assert.True(content == updatedDocument.SomeContent, GetTestName());
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public async Task UpdateOneAsync()
|
|
||||||
{
|
|
||||||
// Arrange
|
|
||||||
var document = CreateTestDocument();
|
|
||||||
SUT.AddOne<T>(document);
|
|
||||||
var content = GetContent();
|
|
||||||
document.SomeContent = content;
|
|
||||||
// Act
|
|
||||||
var result = await SUT.UpdateOneAsync<T>(document);
|
|
||||||
// Assert
|
|
||||||
Assert.True(result);
|
|
||||||
var updatedDocument = SUT.GetById<T>(document.Id, PartitionKey);
|
|
||||||
Assert.True(null != updatedDocument, GetTestName());
|
|
||||||
Assert.True(content == updatedDocument.SomeContent, GetTestName());
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void UpdateOneField()
|
|
||||||
{
|
|
||||||
// Arrange
|
|
||||||
var document = CreateTestDocument();
|
|
||||||
SUT.AddOne<T>(document);
|
|
||||||
var content = GetContent();
|
|
||||||
// Act
|
|
||||||
var result = SUT.UpdateOne<T, string>(document, x => x.SomeContent, content);
|
|
||||||
// Assert
|
|
||||||
Assert.True(result, GetTestName());
|
|
||||||
var updatedDocument = SUT.GetById<T>(document.Id, PartitionKey);
|
|
||||||
Assert.True(null != updatedDocument, GetTestName());
|
|
||||||
Assert.True(content == updatedDocument.SomeContent, GetTestName());
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public async Task UpdateOneFieldAsync()
|
|
||||||
{
|
|
||||||
// Arrange
|
|
||||||
var document = CreateTestDocument();
|
|
||||||
SUT.AddOne<T>(document);
|
|
||||||
var content = GetContent();
|
|
||||||
// Act
|
|
||||||
var result = await SUT.UpdateOneAsync<T, string>(document, x => x.SomeContent, content);
|
|
||||||
// Assert
|
|
||||||
Assert.True(result, GetTestName());
|
|
||||||
var updatedDocument = SUT.GetById<T>(document.Id, PartitionKey);
|
|
||||||
Assert.True(null != updatedDocument, GetTestName());
|
|
||||||
Assert.True(content == updatedDocument.SomeContent, GetTestName());
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void UpdateOneFieldWithFilter()
|
|
||||||
{
|
|
||||||
// Arrange
|
|
||||||
var document = CreateTestDocument();
|
|
||||||
SUT.AddOne<T>(document);
|
|
||||||
var content = GetContent();
|
|
||||||
// Act
|
|
||||||
var result = SUT.UpdateOne<T, string>(x => x.Id.Equals(document.Id), x => x.SomeContent, content, PartitionKey);
|
|
||||||
// Assert
|
|
||||||
Assert.True(result, GetTestName());
|
|
||||||
var updatedDocument = SUT.GetById<T>(document.Id, PartitionKey);
|
|
||||||
Assert.True(null != updatedDocument, GetTestName());
|
|
||||||
Assert.True(content == updatedDocument.SomeContent, GetTestName());
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public async Task UpdateOneFieldWithFilterAsync()
|
|
||||||
{
|
|
||||||
// Arrange
|
|
||||||
var document = CreateTestDocument();
|
|
||||||
SUT.AddOne<T>(document);
|
|
||||||
var content = GetContent();
|
|
||||||
// Act
|
|
||||||
var result = await SUT.UpdateOneAsync<T, string>(x => x.Id.Equals(document.Id), x => x.SomeContent, content, PartitionKey);
|
|
||||||
// Assert
|
|
||||||
Assert.True(result, GetTestName());
|
|
||||||
var updatedDocument = SUT.GetById<T>(document.Id, PartitionKey);
|
|
||||||
Assert.True(null != updatedDocument, GetTestName());
|
|
||||||
Assert.True(content == updatedDocument.SomeContent, GetTestName());
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public async Task UpdateOneAsyncWithUpdateDefinition()
|
|
||||||
{
|
|
||||||
// Arrange
|
|
||||||
var document = CreateTestDocument();
|
|
||||||
SUT.AddOne<T>(document);
|
|
||||||
var childrenToAdd = new List<Child>
|
|
||||||
{
|
|
||||||
new Child("testType1", "testValue1"),
|
|
||||||
new Child("testType2", "testValue2")
|
|
||||||
};
|
|
||||||
|
|
||||||
var updateDef = MongoDB.Driver.Builders<T>.Update.AddToSetEach(p => p.Children, childrenToAdd);
|
|
||||||
|
|
||||||
// Act
|
|
||||||
var result = await SUT.UpdateOneAsync<T>(document, updateDef);
|
|
||||||
// Assert
|
|
||||||
Assert.True(result);
|
|
||||||
var updatedDocument = SUT.GetById<T>(document.Id, PartitionKey);
|
|
||||||
Assert.True(null != updatedDocument);
|
|
||||||
Assert.True(childrenToAdd[0].Type == updatedDocument.Children[0].Type, GetTestName());
|
|
||||||
Assert.True(childrenToAdd[0].Value == updatedDocument.Children[0].Value, GetTestName());
|
|
||||||
Assert.True(childrenToAdd[1].Type == updatedDocument.Children[1].Type, GetTestName());
|
|
||||||
Assert.True(childrenToAdd[1].Value == updatedDocument.Children[1].Value, GetTestName());
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void UpdateOneWithUpdateDefinition()
|
|
||||||
{
|
|
||||||
// Arrange
|
|
||||||
var document = CreateTestDocument();
|
|
||||||
SUT.AddOne<T>(document);
|
|
||||||
var childrenToAdd = new List<Child>
|
|
||||||
{
|
|
||||||
new Child("testType1", "testValue1"),
|
|
||||||
new Child("testType2", "testValue2")
|
|
||||||
};
|
|
||||||
|
|
||||||
var updateDef = MongoDB.Driver.Builders<T>.Update.AddToSetEach(p => p.Children, childrenToAdd);
|
|
||||||
|
|
||||||
// Act
|
|
||||||
var result = SUT.UpdateOne<T>(document, updateDef);
|
|
||||||
// Assert
|
|
||||||
Assert.True(result);
|
|
||||||
var updatedDocument = SUT.GetById<T>(document.Id, PartitionKey);
|
|
||||||
Assert.True(null != updatedDocument);
|
|
||||||
Assert.True(childrenToAdd[0].Type == updatedDocument.Children[0].Type, GetTestName());
|
|
||||||
Assert.True(childrenToAdd[0].Value == updatedDocument.Children[0].Value, GetTestName());
|
|
||||||
Assert.True(childrenToAdd[1].Type == updatedDocument.Children[1].Type, GetTestName());
|
|
||||||
Assert.True(childrenToAdd[1].Value == updatedDocument.Children[1].Value, GetTestName());
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Update
|
|
||||||
|
|
||||||
#region Delete
|
#region Delete
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
@@ -0,0 +1,381 @@
|
|||||||
|
using MongoDB.Driver;
|
||||||
|
using MongoDbGenericRepository;
|
||||||
|
using MongoDbGenericRepository.Models;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace CoreIntegrationTests.Infrastructure
|
||||||
|
{
|
||||||
|
public abstract partial class MongoDbDocumentTestBase<T> :
|
||||||
|
IClassFixture<MongoDbTestFixture<T, Guid>>
|
||||||
|
where T : TestDoc, new()
|
||||||
|
{
|
||||||
|
#region Update One
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void UpdateOne()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var document = CreateTestDocument();
|
||||||
|
SUT.AddOne<T>(document);
|
||||||
|
var content = GetContent();
|
||||||
|
document.SomeContent = content;
|
||||||
|
// Act
|
||||||
|
var result = SUT.UpdateOne<T>(document);
|
||||||
|
// Assert
|
||||||
|
Assert.True(result);
|
||||||
|
var updatedDocument = SUT.GetById<T>(document.Id, PartitionKey);
|
||||||
|
Assert.True(null != updatedDocument, GetTestName());
|
||||||
|
Assert.True(content == updatedDocument.SomeContent, GetTestName());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task UpdateOneAsync()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var document = CreateTestDocument();
|
||||||
|
SUT.AddOne<T>(document);
|
||||||
|
var content = GetContent();
|
||||||
|
document.SomeContent = content;
|
||||||
|
// Act
|
||||||
|
var result = await SUT.UpdateOneAsync<T>(document);
|
||||||
|
// Assert
|
||||||
|
Assert.True(result);
|
||||||
|
var updatedDocument = SUT.GetById<T>(document.Id, PartitionKey);
|
||||||
|
Assert.True(null != updatedDocument, GetTestName());
|
||||||
|
Assert.True(content == updatedDocument.SomeContent, GetTestName());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void UpdateOneField()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var document = CreateTestDocument();
|
||||||
|
SUT.AddOne<T>(document);
|
||||||
|
var content = GetContent();
|
||||||
|
// Act
|
||||||
|
var result = SUT.UpdateOne<T, string>(document, x => x.SomeContent, content);
|
||||||
|
// Assert
|
||||||
|
Assert.True(result, GetTestName());
|
||||||
|
var updatedDocument = SUT.GetById<T>(document.Id, PartitionKey);
|
||||||
|
Assert.True(null != updatedDocument, GetTestName());
|
||||||
|
Assert.True(content == updatedDocument.SomeContent, GetTestName());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task UpdateOneFieldAsync()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var document = CreateTestDocument();
|
||||||
|
SUT.AddOne<T>(document);
|
||||||
|
var content = GetContent();
|
||||||
|
// Act
|
||||||
|
var result = await SUT.UpdateOneAsync<T, string>(document, x => x.SomeContent, content);
|
||||||
|
// Assert
|
||||||
|
Assert.True(result, GetTestName());
|
||||||
|
var updatedDocument = SUT.GetById<T>(document.Id, PartitionKey);
|
||||||
|
Assert.True(null != updatedDocument, GetTestName());
|
||||||
|
Assert.True(content == updatedDocument.SomeContent, GetTestName());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void UpdateOneFieldWithFilter()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var document = CreateTestDocument();
|
||||||
|
SUT.AddOne<T>(document);
|
||||||
|
var content = GetContent();
|
||||||
|
// Act
|
||||||
|
var result = SUT.UpdateOne<T, string>(x => x.Id.Equals(document.Id), x => x.SomeContent, content, PartitionKey);
|
||||||
|
// Assert
|
||||||
|
Assert.True(result, GetTestName());
|
||||||
|
var updatedDocument = SUT.GetById<T>(document.Id, PartitionKey);
|
||||||
|
Assert.True(null != updatedDocument, GetTestName());
|
||||||
|
Assert.True(content == updatedDocument.SomeContent, GetTestName());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task UpdateOneFieldWithFilterAsync()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var document = CreateTestDocument();
|
||||||
|
SUT.AddOne<T>(document);
|
||||||
|
var content = GetContent();
|
||||||
|
// Act
|
||||||
|
var result = await SUT.UpdateOneAsync<T, string>(x => x.Id.Equals(document.Id), x => x.SomeContent, content, PartitionKey);
|
||||||
|
// Assert
|
||||||
|
Assert.True(result, GetTestName());
|
||||||
|
var updatedDocument = SUT.GetById<T>(document.Id, PartitionKey);
|
||||||
|
Assert.True(null != updatedDocument, GetTestName());
|
||||||
|
Assert.True(content == updatedDocument.SomeContent, GetTestName());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task UpdateOneAsyncWithUpdateDefinition()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var document = CreateTestDocument();
|
||||||
|
SUT.AddOne<T>(document);
|
||||||
|
var childrenToAdd = new List<Child>
|
||||||
|
{
|
||||||
|
new Child("testType1", "testValue1"),
|
||||||
|
new Child("testType2", "testValue2")
|
||||||
|
};
|
||||||
|
|
||||||
|
var updateDef = MongoDB.Driver.Builders<T>.Update.AddToSetEach(p => p.Children, childrenToAdd);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var result = await SUT.UpdateOneAsync<T>(document, updateDef);
|
||||||
|
// Assert
|
||||||
|
Assert.True(result);
|
||||||
|
var updatedDocument = SUT.GetById<T>(document.Id, PartitionKey);
|
||||||
|
Assert.True(null != updatedDocument);
|
||||||
|
Assert.True(childrenToAdd[0].Type == updatedDocument.Children[0].Type, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[0].Value == updatedDocument.Children[0].Value, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[1].Type == updatedDocument.Children[1].Type, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[1].Value == updatedDocument.Children[1].Value, GetTestName());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void UpdateOneWithUpdateDefinition()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var document = CreateTestDocument();
|
||||||
|
SUT.AddOne<T>(document);
|
||||||
|
var childrenToAdd = new List<Child>
|
||||||
|
{
|
||||||
|
new Child("testType1", "testValue1"),
|
||||||
|
new Child("testType2", "testValue2")
|
||||||
|
};
|
||||||
|
|
||||||
|
var updateDef = MongoDB.Driver.Builders<T>.Update.AddToSetEach(p => p.Children, childrenToAdd);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var result = SUT.UpdateOne<T>(document, updateDef);
|
||||||
|
// Assert
|
||||||
|
Assert.True(result);
|
||||||
|
var updatedDocument = SUT.GetById<T>(document.Id, PartitionKey);
|
||||||
|
Assert.True(null != updatedDocument);
|
||||||
|
Assert.True(childrenToAdd[0].Type == updatedDocument.Children[0].Type, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[0].Value == updatedDocument.Children[0].Value, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[1].Type == updatedDocument.Children[1].Type, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[1].Value == updatedDocument.Children[1].Value, GetTestName());
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Update One
|
||||||
|
|
||||||
|
#region Update Many
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task UpdateManyWithLinqFilterAsync()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var documents = CreateTestDocuments(2);
|
||||||
|
SUT.AddMany<T>(documents);
|
||||||
|
var docIds = documents.Select(u => u.Id).ToArray();
|
||||||
|
var content = GetContent();
|
||||||
|
// Act
|
||||||
|
var result = await SUT.UpdateManyAsync<T, string>(x => docIds.Contains(x.Id), x => x.SomeContent, content, PartitionKey);
|
||||||
|
// Assert
|
||||||
|
Assert.True(result == 2, GetTestName());
|
||||||
|
var updatedDocument = SUT.GetAll<T>(x => docIds.Contains(x.Id), PartitionKey);
|
||||||
|
|
||||||
|
Assert.True(updatedDocument.Count == 2);
|
||||||
|
Assert.True(updatedDocument.All(u => u.SomeContent == content), GetTestName());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task UpdateManyWithFilterDefinitionAsync()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var documents = CreateTestDocuments(2);
|
||||||
|
SUT.AddMany<T>(documents);
|
||||||
|
var docIds = documents.Select(u => u.Id).ToArray();
|
||||||
|
var filterDefinition = Builders<T>.Filter.Where(x => docIds.Contains(x.Id));
|
||||||
|
var content = GetContent();
|
||||||
|
// Act
|
||||||
|
var result = await SUT.UpdateManyAsync<T, string>(filterDefinition, x => x.SomeContent, content, PartitionKey);
|
||||||
|
// Assert
|
||||||
|
Assert.True(result == 2, GetTestName());
|
||||||
|
var updatedDocument = SUT.GetAll<T>(x => docIds.Contains(x.Id), PartitionKey);
|
||||||
|
|
||||||
|
Assert.True(updatedDocument.Count == 2);
|
||||||
|
Assert.True(updatedDocument.All(u => u.SomeContent == content), GetTestName());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task UpdateManyWithLinqFilterAndUpdateDefinitionAsync()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var documents = CreateTestDocuments(2);
|
||||||
|
SUT.AddMany<T>(documents);
|
||||||
|
var docIds = documents.Select(u => u.Id).ToArray();
|
||||||
|
var childrenToAdd = new List<Child>
|
||||||
|
{
|
||||||
|
new Child("testType1", "testValue1"),
|
||||||
|
new Child("testType2", "testValue2")
|
||||||
|
};
|
||||||
|
|
||||||
|
var updateDef = Builders<T>.Update.AddToSetEach(p => p.Children, childrenToAdd);
|
||||||
|
var content = GetContent();
|
||||||
|
// Act
|
||||||
|
var result = await SUT.UpdateManyAsync<T>(x => docIds.Contains(x.Id), updateDef, PartitionKey);
|
||||||
|
// Assert
|
||||||
|
Assert.True(result == 2, GetTestName());
|
||||||
|
var updatedDocuments = SUT.GetAll<T>(x => docIds.Contains(x.Id), PartitionKey);
|
||||||
|
|
||||||
|
Assert.True(updatedDocuments.Count == 2);
|
||||||
|
updatedDocuments.ForEach(updatedDocument =>
|
||||||
|
{
|
||||||
|
Assert.True(childrenToAdd[0].Type == updatedDocument.Children[0].Type, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[0].Value == updatedDocument.Children[0].Value, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[1].Type == updatedDocument.Children[1].Type, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[1].Value == updatedDocument.Children[1].Value, GetTestName());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task UpdateManyWithFilterAndUpdateDefinitionsAsync()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var documents = CreateTestDocuments(2);
|
||||||
|
SUT.AddMany<T>(documents);
|
||||||
|
var childrenToAdd = new List<Child>
|
||||||
|
{
|
||||||
|
new Child("testType1", "testValue1"),
|
||||||
|
new Child("testType2", "testValue2")
|
||||||
|
};
|
||||||
|
|
||||||
|
var updateDef = Builders<T>.Update.AddToSetEach(p => p.Children, childrenToAdd);
|
||||||
|
|
||||||
|
var docIds = documents.Select(u => u.Id).ToArray();
|
||||||
|
var filterDefinition = Builders<T>.Filter.Where(x => docIds.Contains(x.Id));
|
||||||
|
var content = GetContent();
|
||||||
|
// Act
|
||||||
|
var result = await SUT.UpdateManyAsync<T>(filterDefinition, updateDef, PartitionKey);
|
||||||
|
// Assert
|
||||||
|
Assert.True(result == 2, GetTestName());
|
||||||
|
var updatedDocuments = SUT.GetAll<T>(x => docIds.Contains(x.Id), PartitionKey);
|
||||||
|
|
||||||
|
Assert.True(updatedDocuments.Count == 2);
|
||||||
|
updatedDocuments.ForEach(updatedDocument =>
|
||||||
|
{
|
||||||
|
Assert.True(childrenToAdd[0].Type == updatedDocument.Children[0].Type, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[0].Value == updatedDocument.Children[0].Value, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[1].Type == updatedDocument.Children[1].Type, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[1].Value == updatedDocument.Children[1].Value, GetTestName());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void UpdateManyWithLinqFilter()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var documents = CreateTestDocuments(2);
|
||||||
|
SUT.AddMany<T>(documents);
|
||||||
|
var docIds = documents.Select(u => u.Id).ToArray();
|
||||||
|
var content = GetContent();
|
||||||
|
// Act
|
||||||
|
var result = SUT.UpdateMany<T, string>(x => docIds.Contains(x.Id), x => x.SomeContent, content, PartitionKey);
|
||||||
|
// Assert
|
||||||
|
Assert.True(result == 2, GetTestName());
|
||||||
|
var updatedDocument = SUT.GetAll<T>(x => docIds.Contains(x.Id), PartitionKey);
|
||||||
|
Assert.True(updatedDocument.Count == 2);
|
||||||
|
Assert.True(updatedDocument.All(u => u.SomeContent == content), GetTestName());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void UpdateManyWithFilterDefinition()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var documents = CreateTestDocuments(2);
|
||||||
|
SUT.AddMany<T>(documents);
|
||||||
|
var docIds = documents.Select(u => u.Id).ToArray();
|
||||||
|
var filterDefinition = Builders<T>.Filter.Where(x => docIds.Contains(x.Id));
|
||||||
|
var content = GetContent();
|
||||||
|
// Act
|
||||||
|
var result = SUT.UpdateMany<T, string>(filterDefinition, x => x.SomeContent, content, PartitionKey);
|
||||||
|
// Assert
|
||||||
|
Assert.True(result == 2, GetTestName());
|
||||||
|
var updatedDocument = SUT.GetAll<T>(x => docIds.Contains(x.Id), PartitionKey);
|
||||||
|
|
||||||
|
Assert.True(updatedDocument.Count == 2);
|
||||||
|
Assert.True(updatedDocument.All(u => u.SomeContent == content), GetTestName());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void UpdateManyWithLinqFilterAndUpdateDefinition()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var documents = CreateTestDocuments(2);
|
||||||
|
SUT.AddMany<T>(documents);
|
||||||
|
var docIds = documents.Select(u => u.Id).ToArray();
|
||||||
|
var childrenToAdd = new List<Child>
|
||||||
|
{
|
||||||
|
new Child("testType1", "testValue1"),
|
||||||
|
new Child("testType2", "testValue2")
|
||||||
|
};
|
||||||
|
|
||||||
|
var updateDef = Builders<T>.Update.AddToSetEach(p => p.Children, childrenToAdd);
|
||||||
|
var content = GetContent();
|
||||||
|
// Act
|
||||||
|
var result = SUT.UpdateMany<T>(x => docIds.Contains(x.Id), updateDef, PartitionKey);
|
||||||
|
// Assert
|
||||||
|
Assert.True(result == 2, GetTestName());
|
||||||
|
var updatedDocuments = SUT.GetAll<T>(x => docIds.Contains(x.Id), PartitionKey);
|
||||||
|
|
||||||
|
Assert.True(updatedDocuments.Count == 2);
|
||||||
|
updatedDocuments.ForEach(updatedDocument =>
|
||||||
|
{
|
||||||
|
Assert.True(childrenToAdd[0].Type == updatedDocument.Children[0].Type, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[0].Value == updatedDocument.Children[0].Value, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[1].Type == updatedDocument.Children[1].Type, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[1].Value == updatedDocument.Children[1].Value, GetTestName());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void UpdateManyWithFilterAndUpdateDefinitions()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var documents = CreateTestDocuments(2);
|
||||||
|
SUT.AddMany<T>(documents);
|
||||||
|
var childrenToAdd = new List<Child>
|
||||||
|
{
|
||||||
|
new Child("testType1", "testValue1"),
|
||||||
|
new Child("testType2", "testValue2")
|
||||||
|
};
|
||||||
|
|
||||||
|
var updateDef = Builders<T>.Update.AddToSetEach(p => p.Children, childrenToAdd);
|
||||||
|
|
||||||
|
var docIds = documents.Select(u => u.Id).ToArray();
|
||||||
|
var filterDefinition = Builders<T>.Filter.Where(x => docIds.Contains(x.Id));
|
||||||
|
var content = GetContent();
|
||||||
|
// Act
|
||||||
|
var result = SUT.UpdateMany<T>(filterDefinition, updateDef, PartitionKey);
|
||||||
|
// Assert
|
||||||
|
Assert.True(result == 2, GetTestName());
|
||||||
|
var updatedDocuments = SUT.GetAll<T>(x => docIds.Contains(x.Id), PartitionKey);
|
||||||
|
|
||||||
|
Assert.True(updatedDocuments.Count == 2);
|
||||||
|
updatedDocuments.ForEach(updatedDocument =>
|
||||||
|
{
|
||||||
|
Assert.True(childrenToAdd[0].Type == updatedDocument.Children[0].Type, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[0].Value == updatedDocument.Children[0].Value, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[1].Type == updatedDocument.Children[1].Type, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[1].Value == updatedDocument.Children[1].Value, GetTestName());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endregion Update Many
|
||||||
|
}
|
||||||
|
}
|
||||||
+2
-156
@@ -12,7 +12,7 @@ using Xunit;
|
|||||||
|
|
||||||
namespace CoreIntegrationTests.Infrastructure
|
namespace CoreIntegrationTests.Infrastructure
|
||||||
{
|
{
|
||||||
public abstract class MongoDbTKeyDocumentTestBase<T, TKey> :
|
public abstract partial class MongoDbTKeyDocumentTestBase<T, TKey> :
|
||||||
IClassFixture<MongoDbTestFixture<T, TKey>>
|
IClassFixture<MongoDbTestFixture<T, TKey>>
|
||||||
where T : TestDoc<TKey>, new()
|
where T : TestDoc<TKey>, new()
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
@@ -348,160 +348,6 @@ namespace CoreIntegrationTests.Infrastructure
|
|||||||
|
|
||||||
#endregion Read
|
#endregion Read
|
||||||
|
|
||||||
#region Update
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void UpdateOne()
|
|
||||||
{
|
|
||||||
// Arrange
|
|
||||||
var document = CreateTestDocument();
|
|
||||||
SUT.AddOne<T, TKey>(document);
|
|
||||||
var content = GetContent();
|
|
||||||
document.SomeContent = content;
|
|
||||||
// Act
|
|
||||||
var result = SUT.UpdateOne<T, TKey>(document);
|
|
||||||
// Assert
|
|
||||||
Assert.True(result);
|
|
||||||
var updatedDocument = SUT.GetById<T, TKey>(document.Id, PartitionKey);
|
|
||||||
Assert.True(null != updatedDocument, GetTestName());
|
|
||||||
Assert.True(content == updatedDocument.SomeContent, GetTestName());
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public async Task UpdateOneAsync()
|
|
||||||
{
|
|
||||||
// Arrange
|
|
||||||
var document = CreateTestDocument();
|
|
||||||
SUT.AddOne<T, TKey>(document);
|
|
||||||
var content = GetContent();
|
|
||||||
document.SomeContent = content;
|
|
||||||
// Act
|
|
||||||
var result = await SUT.UpdateOneAsync<T, TKey>(document);
|
|
||||||
// Assert
|
|
||||||
Assert.True(result);
|
|
||||||
var updatedDocument = SUT.GetById<T, TKey>(document.Id, PartitionKey);
|
|
||||||
Assert.True(null != updatedDocument, GetTestName());
|
|
||||||
Assert.True(content == updatedDocument.SomeContent, GetTestName());
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void UpdateOneField()
|
|
||||||
{
|
|
||||||
// Arrange
|
|
||||||
var document = CreateTestDocument();
|
|
||||||
SUT.AddOne<T, TKey>(document);
|
|
||||||
var content = GetContent();
|
|
||||||
// Act
|
|
||||||
var result = SUT.UpdateOne<T, TKey, string>(document, x => x.SomeContent, content);
|
|
||||||
// Assert
|
|
||||||
Assert.True(result, GetTestName());
|
|
||||||
var updatedDocument = SUT.GetById<T, TKey>(document.Id, PartitionKey);
|
|
||||||
Assert.True(null != updatedDocument, GetTestName());
|
|
||||||
Assert.True(content == updatedDocument.SomeContent, GetTestName());
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public async Task UpdateOneFieldAsync()
|
|
||||||
{
|
|
||||||
// Arrange
|
|
||||||
var document = CreateTestDocument();
|
|
||||||
SUT.AddOne<T, TKey>(document);
|
|
||||||
var content = GetContent();
|
|
||||||
// Act
|
|
||||||
var result = await SUT.UpdateOneAsync<T, TKey, string>(document, x => x.SomeContent, content);
|
|
||||||
// Assert
|
|
||||||
Assert.True(result, GetTestName());
|
|
||||||
var updatedDocument = SUT.GetById<T, TKey>(document.Id, PartitionKey);
|
|
||||||
Assert.True(null != updatedDocument, GetTestName());
|
|
||||||
Assert.True(content == updatedDocument.SomeContent, GetTestName());
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void UpdateOneFieldWithFilter()
|
|
||||||
{
|
|
||||||
// Arrange
|
|
||||||
var document = CreateTestDocument();
|
|
||||||
SUT.AddOne<T, TKey>(document);
|
|
||||||
var content = GetContent();
|
|
||||||
// Act
|
|
||||||
var result = SUT.UpdateOne<T, TKey, string>(x => x.Id.Equals(document.Id), x => x.SomeContent, content, PartitionKey);
|
|
||||||
// Assert
|
|
||||||
Assert.True(result, GetTestName());
|
|
||||||
var updatedDocument = SUT.GetById<T, TKey>(document.Id, PartitionKey);
|
|
||||||
Assert.True(null != updatedDocument, GetTestName());
|
|
||||||
Assert.True(content == updatedDocument.SomeContent, GetTestName());
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public async Task UpdateOneFieldWithFilterAsync()
|
|
||||||
{
|
|
||||||
// Arrange
|
|
||||||
var document = CreateTestDocument();
|
|
||||||
SUT.AddOne<T, TKey>(document);
|
|
||||||
var content = GetContent();
|
|
||||||
// Act
|
|
||||||
var result = await SUT.UpdateOneAsync<T, TKey, string>(x => x.Id.Equals(document.Id), x => x.SomeContent, content, PartitionKey);
|
|
||||||
// Assert
|
|
||||||
Assert.True(result, GetTestName());
|
|
||||||
var updatedDocument = SUT.GetById<T, TKey>(document.Id, PartitionKey);
|
|
||||||
Assert.True(null != updatedDocument, GetTestName());
|
|
||||||
Assert.True(content == updatedDocument.SomeContent, GetTestName());
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public async Task UpdateOneAsyncWithUpdateDefinition()
|
|
||||||
{
|
|
||||||
// Arrange
|
|
||||||
var document = CreateTestDocument();
|
|
||||||
SUT.AddOne<T, TKey>(document);
|
|
||||||
var childrenToAdd = new List<Child>
|
|
||||||
{
|
|
||||||
new Child("testType1", "testValue1"),
|
|
||||||
new Child("testType2", "testValue2")
|
|
||||||
};
|
|
||||||
|
|
||||||
var updateDef = MongoDB.Driver.Builders<T>.Update.AddToSetEach(p => p.Children, childrenToAdd);
|
|
||||||
|
|
||||||
// Act
|
|
||||||
var result = await SUT.UpdateOneAsync<T, TKey>(document, updateDef);
|
|
||||||
// Assert
|
|
||||||
Assert.True(result);
|
|
||||||
var updatedDocument = SUT.GetById<T, TKey>(document.Id, PartitionKey);
|
|
||||||
Assert.True(null != updatedDocument);
|
|
||||||
Assert.True(childrenToAdd[0].Type == updatedDocument.Children[0].Type, GetTestName());
|
|
||||||
Assert.True(childrenToAdd[0].Value == updatedDocument.Children[0].Value, GetTestName());
|
|
||||||
Assert.True(childrenToAdd[1].Type == updatedDocument.Children[1].Type, GetTestName());
|
|
||||||
Assert.True(childrenToAdd[1].Value == updatedDocument.Children[1].Value, GetTestName());
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void UpdateOneWithUpdateDefinition()
|
|
||||||
{
|
|
||||||
// Arrange
|
|
||||||
var document = CreateTestDocument();
|
|
||||||
SUT.AddOne<T, TKey>(document);
|
|
||||||
var childrenToAdd = new List<Child>
|
|
||||||
{
|
|
||||||
new Child("testType1", "testValue1"),
|
|
||||||
new Child("testType2", "testValue2")
|
|
||||||
};
|
|
||||||
|
|
||||||
var updateDef = MongoDB.Driver.Builders<T>.Update.AddToSetEach(p => p.Children, childrenToAdd);
|
|
||||||
|
|
||||||
// Act
|
|
||||||
var result = SUT.UpdateOne<T, TKey>(document, updateDef);
|
|
||||||
// Assert
|
|
||||||
Assert.True(result);
|
|
||||||
var updatedDocument = SUT.GetById<T, TKey>(document.Id, PartitionKey);
|
|
||||||
Assert.True(null != updatedDocument);
|
|
||||||
Assert.True(childrenToAdd[0].Type == updatedDocument.Children[0].Type, GetTestName());
|
|
||||||
Assert.True(childrenToAdd[0].Value == updatedDocument.Children[0].Value, GetTestName());
|
|
||||||
Assert.True(childrenToAdd[1].Type == updatedDocument.Children[1].Type, GetTestName());
|
|
||||||
Assert.True(childrenToAdd[1].Value == updatedDocument.Children[1].Value, GetTestName());
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Update
|
|
||||||
|
|
||||||
#region Delete
|
#region Delete
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
@@ -950,7 +796,7 @@ namespace CoreIntegrationTests.Infrastructure
|
|||||||
|
|
||||||
#region Index Management
|
#region Index Management
|
||||||
|
|
||||||
static SemaphoreSlim textIndexSemaphore = new SemaphoreSlim(1, 1);
|
static readonly SemaphoreSlim textIndexSemaphore = new SemaphoreSlim(1, 1);
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task CreateTextIndexNoOptionAsync()
|
public async Task CreateTextIndexNoOptionAsync()
|
||||||
@@ -0,0 +1,377 @@
|
|||||||
|
using MongoDB.Driver;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace CoreIntegrationTests.Infrastructure
|
||||||
|
{
|
||||||
|
public abstract partial class MongoDbTKeyDocumentTestBase<T, TKey> :
|
||||||
|
IClassFixture<MongoDbTestFixture<T, TKey>>
|
||||||
|
where T : TestDoc<TKey>, new()
|
||||||
|
where TKey : IEquatable<TKey>
|
||||||
|
|
||||||
|
{
|
||||||
|
#region Update One
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void UpdateOne()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var document = CreateTestDocument();
|
||||||
|
SUT.AddOne<T, TKey>(document);
|
||||||
|
var content = GetContent();
|
||||||
|
document.SomeContent = content;
|
||||||
|
// Act
|
||||||
|
var result = SUT.UpdateOne<T, TKey>(document);
|
||||||
|
// Assert
|
||||||
|
Assert.True(result);
|
||||||
|
var updatedDocument = SUT.GetById<T, TKey>(document.Id, PartitionKey);
|
||||||
|
Assert.True(null != updatedDocument, GetTestName());
|
||||||
|
Assert.True(content == updatedDocument.SomeContent, GetTestName());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task UpdateOneAsync()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var document = CreateTestDocument();
|
||||||
|
SUT.AddOne<T, TKey>(document);
|
||||||
|
var content = GetContent();
|
||||||
|
document.SomeContent = content;
|
||||||
|
// Act
|
||||||
|
var result = await SUT.UpdateOneAsync<T, TKey>(document);
|
||||||
|
// Assert
|
||||||
|
Assert.True(result);
|
||||||
|
var updatedDocument = SUT.GetById<T, TKey>(document.Id, PartitionKey);
|
||||||
|
Assert.True(null != updatedDocument, GetTestName());
|
||||||
|
Assert.True(content == updatedDocument.SomeContent, GetTestName());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void UpdateOneField()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var document = CreateTestDocument();
|
||||||
|
SUT.AddOne<T, TKey>(document);
|
||||||
|
var content = GetContent();
|
||||||
|
// Act
|
||||||
|
var result = SUT.UpdateOne<T, TKey, string>(document, x => x.SomeContent, content);
|
||||||
|
// Assert
|
||||||
|
Assert.True(result, GetTestName());
|
||||||
|
var updatedDocument = SUT.GetById<T, TKey>(document.Id, PartitionKey);
|
||||||
|
Assert.True(null != updatedDocument, GetTestName());
|
||||||
|
Assert.True(content == updatedDocument.SomeContent, GetTestName());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task UpdateOneFieldAsync()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var document = CreateTestDocument();
|
||||||
|
SUT.AddOne<T, TKey>(document);
|
||||||
|
var content = GetContent();
|
||||||
|
// Act
|
||||||
|
var result = await SUT.UpdateOneAsync<T, TKey, string>(document, x => x.SomeContent, content);
|
||||||
|
// Assert
|
||||||
|
Assert.True(result, GetTestName());
|
||||||
|
var updatedDocument = SUT.GetById<T, TKey>(document.Id, PartitionKey);
|
||||||
|
Assert.True(null != updatedDocument, GetTestName());
|
||||||
|
Assert.True(content == updatedDocument.SomeContent, GetTestName());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void UpdateOneFieldWithFilter()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var document = CreateTestDocument();
|
||||||
|
SUT.AddOne<T, TKey>(document);
|
||||||
|
var content = GetContent();
|
||||||
|
// Act
|
||||||
|
var result = SUT.UpdateOne<T, TKey, string>(x => x.Id.Equals(document.Id), x => x.SomeContent, content, PartitionKey);
|
||||||
|
// Assert
|
||||||
|
Assert.True(result, GetTestName());
|
||||||
|
var updatedDocument = SUT.GetById<T, TKey>(document.Id, PartitionKey);
|
||||||
|
Assert.True(null != updatedDocument, GetTestName());
|
||||||
|
Assert.True(content == updatedDocument.SomeContent, GetTestName());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task UpdateOneFieldWithFilterAsync()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var document = CreateTestDocument();
|
||||||
|
SUT.AddOne<T, TKey>(document);
|
||||||
|
var content = GetContent();
|
||||||
|
// Act
|
||||||
|
var result = await SUT.UpdateOneAsync<T, TKey, string>(x => x.Id.Equals(document.Id), x => x.SomeContent, content, PartitionKey);
|
||||||
|
// Assert
|
||||||
|
Assert.True(result, GetTestName());
|
||||||
|
var updatedDocument = SUT.GetById<T, TKey>(document.Id, PartitionKey);
|
||||||
|
Assert.True(null != updatedDocument, GetTestName());
|
||||||
|
Assert.True(content == updatedDocument.SomeContent, GetTestName());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task UpdateOneAsyncWithUpdateDefinition()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var document = CreateTestDocument();
|
||||||
|
SUT.AddOne<T, TKey>(document);
|
||||||
|
var childrenToAdd = new List<Child>
|
||||||
|
{
|
||||||
|
new Child("testType1", "testValue1"),
|
||||||
|
new Child("testType2", "testValue2")
|
||||||
|
};
|
||||||
|
|
||||||
|
var updateDef = MongoDB.Driver.Builders<T>.Update.AddToSetEach(p => p.Children, childrenToAdd);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var result = await SUT.UpdateOneAsync<T, TKey>(document, updateDef);
|
||||||
|
// Assert
|
||||||
|
Assert.True(result);
|
||||||
|
var updatedDocument = SUT.GetById<T, TKey>(document.Id, PartitionKey);
|
||||||
|
Assert.True(null != updatedDocument);
|
||||||
|
Assert.True(childrenToAdd[0].Type == updatedDocument.Children[0].Type, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[0].Value == updatedDocument.Children[0].Value, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[1].Type == updatedDocument.Children[1].Type, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[1].Value == updatedDocument.Children[1].Value, GetTestName());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void UpdateOneWithUpdateDefinition()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var document = CreateTestDocument();
|
||||||
|
SUT.AddOne<T, TKey>(document);
|
||||||
|
var childrenToAdd = new List<Child>
|
||||||
|
{
|
||||||
|
new Child("testType1", "testValue1"),
|
||||||
|
new Child("testType2", "testValue2")
|
||||||
|
};
|
||||||
|
|
||||||
|
var updateDef = MongoDB.Driver.Builders<T>.Update.AddToSetEach(p => p.Children, childrenToAdd);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var result = SUT.UpdateOne<T, TKey>(document, updateDef);
|
||||||
|
// Assert
|
||||||
|
Assert.True(result);
|
||||||
|
var updatedDocument = SUT.GetById<T, TKey>(document.Id, PartitionKey);
|
||||||
|
Assert.True(null != updatedDocument);
|
||||||
|
Assert.True(childrenToAdd[0].Type == updatedDocument.Children[0].Type, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[0].Value == updatedDocument.Children[0].Value, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[1].Type == updatedDocument.Children[1].Type, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[1].Value == updatedDocument.Children[1].Value, GetTestName());
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Update One
|
||||||
|
|
||||||
|
#region Update Many
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task UpdateManyWithLinqFilterAsync()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var documents = CreateTestDocuments(2);
|
||||||
|
SUT.AddMany<T, TKey>(documents);
|
||||||
|
var docIds = documents.Select(u => u.Id).ToArray();
|
||||||
|
var content = GetContent();
|
||||||
|
// Act
|
||||||
|
var result = await SUT.UpdateManyAsync<T, TKey, string>(x => docIds.Contains(x.Id), x => x.SomeContent, content, PartitionKey);
|
||||||
|
// Assert
|
||||||
|
Assert.True(result == 2, GetTestName());
|
||||||
|
var updatedDocument = SUT.GetAll<T, TKey>(x => docIds.Contains(x.Id), PartitionKey);
|
||||||
|
|
||||||
|
Assert.True(updatedDocument.Count == 2);
|
||||||
|
Assert.True(updatedDocument.All(u => u.SomeContent == content), GetTestName());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task UpdateManyWithFilterDefinitionAsync()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var documents = CreateTestDocuments(2);
|
||||||
|
SUT.AddMany<T, TKey>(documents);
|
||||||
|
var docIds = documents.Select(u => u.Id).ToArray();
|
||||||
|
var filterDefinition = Builders<T>.Filter.Where(x => docIds.Contains(x.Id));
|
||||||
|
var content = GetContent();
|
||||||
|
// Act
|
||||||
|
var result = await SUT.UpdateManyAsync<T, TKey, string>(filterDefinition, x => x.SomeContent, content, PartitionKey);
|
||||||
|
// Assert
|
||||||
|
Assert.True(result == 2, GetTestName());
|
||||||
|
var updatedDocument = SUT.GetAll<T, TKey>(x => docIds.Contains(x.Id), PartitionKey);
|
||||||
|
|
||||||
|
Assert.True(updatedDocument.Count == 2);
|
||||||
|
Assert.True(updatedDocument.All(u => u.SomeContent == content), GetTestName());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task UpdateManyWithLinqFilterAndUpdateDefinitionAsync()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var documents = CreateTestDocuments(2);
|
||||||
|
SUT.AddMany<T, TKey>(documents);
|
||||||
|
var docIds = documents.Select(u => u.Id).ToArray();
|
||||||
|
var childrenToAdd = new List<Child>
|
||||||
|
{
|
||||||
|
new Child("testType1", "testValue1"),
|
||||||
|
new Child("testType2", "testValue2")
|
||||||
|
};
|
||||||
|
|
||||||
|
var updateDef = Builders<T>.Update.AddToSetEach(p => p.Children, childrenToAdd);
|
||||||
|
var content = GetContent();
|
||||||
|
// Act
|
||||||
|
var result = await SUT.UpdateManyAsync<T, TKey>(x => docIds.Contains(x.Id), updateDef, PartitionKey);
|
||||||
|
// Assert
|
||||||
|
Assert.True(result == 2, GetTestName());
|
||||||
|
var updatedDocuments = SUT.GetAll<T, TKey>(x => docIds.Contains(x.Id), PartitionKey);
|
||||||
|
|
||||||
|
Assert.True(updatedDocuments.Count == 2);
|
||||||
|
updatedDocuments.ForEach(updatedDocument =>
|
||||||
|
{
|
||||||
|
Assert.True(childrenToAdd[0].Type == updatedDocument.Children[0].Type, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[0].Value == updatedDocument.Children[0].Value, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[1].Type == updatedDocument.Children[1].Type, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[1].Value == updatedDocument.Children[1].Value, GetTestName());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task UpdateManyWithFilterAndUpdateDefinitionsAsync()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var documents = CreateTestDocuments(2);
|
||||||
|
SUT.AddMany<T, TKey>(documents);
|
||||||
|
var childrenToAdd = new List<Child>
|
||||||
|
{
|
||||||
|
new Child("testType1", "testValue1"),
|
||||||
|
new Child("testType2", "testValue2")
|
||||||
|
};
|
||||||
|
|
||||||
|
var updateDef = Builders<T>.Update.AddToSetEach(p => p.Children, childrenToAdd);
|
||||||
|
|
||||||
|
var docIds = documents.Select(u => u.Id).ToArray();
|
||||||
|
var filterDefinition = Builders<T>.Filter.Where(x => docIds.Contains(x.Id));
|
||||||
|
var content = GetContent();
|
||||||
|
// Act
|
||||||
|
var result = await SUT.UpdateManyAsync<T, TKey>(filterDefinition, updateDef, PartitionKey);
|
||||||
|
// Assert
|
||||||
|
Assert.True(result == 2, GetTestName());
|
||||||
|
var updatedDocuments = SUT.GetAll<T, TKey>(x => docIds.Contains(x.Id), PartitionKey);
|
||||||
|
|
||||||
|
Assert.True(updatedDocuments.Count == 2);
|
||||||
|
updatedDocuments.ForEach(updatedDocument =>
|
||||||
|
{
|
||||||
|
Assert.True(childrenToAdd[0].Type == updatedDocument.Children[0].Type, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[0].Value == updatedDocument.Children[0].Value, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[1].Type == updatedDocument.Children[1].Type, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[1].Value == updatedDocument.Children[1].Value, GetTestName());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void UpdateManyWithLinqFilter()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var documents = CreateTestDocuments(2);
|
||||||
|
SUT.AddMany<T, TKey>(documents);
|
||||||
|
var docIds = documents.Select(u => u.Id).ToArray();
|
||||||
|
var content = GetContent();
|
||||||
|
// Act
|
||||||
|
var result = SUT.UpdateMany<T, TKey, string>(x => docIds.Contains(x.Id), x => x.SomeContent, content, PartitionKey);
|
||||||
|
// Assert
|
||||||
|
Assert.True(result == 2, GetTestName());
|
||||||
|
var updatedDocument = SUT.GetAll<T, TKey>(x => docIds.Contains(x.Id), PartitionKey);
|
||||||
|
Assert.True(updatedDocument.Count == 2);
|
||||||
|
Assert.True(updatedDocument.All(u => u.SomeContent == content), GetTestName());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void UpdateManyWithFilterDefinition()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var documents = CreateTestDocuments(2);
|
||||||
|
SUT.AddMany<T, TKey>(documents);
|
||||||
|
var docIds = documents.Select(u => u.Id).ToArray();
|
||||||
|
var filterDefinition = Builders<T>.Filter.Where(x => docIds.Contains(x.Id));
|
||||||
|
var content = GetContent();
|
||||||
|
// Act
|
||||||
|
var result = SUT.UpdateMany<T, TKey, string>(filterDefinition, x => x.SomeContent, content, PartitionKey);
|
||||||
|
// Assert
|
||||||
|
Assert.True(result == 2, GetTestName());
|
||||||
|
var updatedDocument = SUT.GetAll<T, TKey>(x => docIds.Contains(x.Id), PartitionKey);
|
||||||
|
|
||||||
|
Assert.True(updatedDocument.Count == 2);
|
||||||
|
Assert.True(updatedDocument.All(u => u.SomeContent == content), GetTestName());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void UpdateManyWithLinqFilterAndUpdateDefinition()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var documents = CreateTestDocuments(2);
|
||||||
|
SUT.AddMany<T, TKey>(documents);
|
||||||
|
var docIds = documents.Select(u => u.Id).ToArray();
|
||||||
|
var childrenToAdd = new List<Child>
|
||||||
|
{
|
||||||
|
new Child("testType1", "testValue1"),
|
||||||
|
new Child("testType2", "testValue2")
|
||||||
|
};
|
||||||
|
|
||||||
|
var updateDef = Builders<T>.Update.AddToSetEach(p => p.Children, childrenToAdd);
|
||||||
|
var content = GetContent();
|
||||||
|
// Act
|
||||||
|
var result = SUT.UpdateMany<T, TKey>(x => docIds.Contains(x.Id), updateDef, PartitionKey);
|
||||||
|
// Assert
|
||||||
|
Assert.True(result == 2, GetTestName());
|
||||||
|
var updatedDocuments = SUT.GetAll<T, TKey>(x => docIds.Contains(x.Id), PartitionKey);
|
||||||
|
|
||||||
|
Assert.True(updatedDocuments.Count == 2);
|
||||||
|
updatedDocuments.ForEach(updatedDocument =>
|
||||||
|
{
|
||||||
|
Assert.True(childrenToAdd[0].Type == updatedDocument.Children[0].Type, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[0].Value == updatedDocument.Children[0].Value, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[1].Type == updatedDocument.Children[1].Type, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[1].Value == updatedDocument.Children[1].Value, GetTestName());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void UpdateManyWithFilterAndUpdateDefinitions()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var documents = CreateTestDocuments(2);
|
||||||
|
SUT.AddMany<T, TKey>(documents);
|
||||||
|
var childrenToAdd = new List<Child>
|
||||||
|
{
|
||||||
|
new Child("testType1", "testValue1"),
|
||||||
|
new Child("testType2", "testValue2")
|
||||||
|
};
|
||||||
|
|
||||||
|
var updateDef = Builders<T>.Update.AddToSetEach(p => p.Children, childrenToAdd);
|
||||||
|
|
||||||
|
var docIds = documents.Select(u => u.Id).ToArray();
|
||||||
|
var filterDefinition = Builders<T>.Filter.Where(x => docIds.Contains(x.Id));
|
||||||
|
var content = GetContent();
|
||||||
|
// Act
|
||||||
|
var result = SUT.UpdateMany<T, TKey>(filterDefinition, updateDef, PartitionKey);
|
||||||
|
// Assert
|
||||||
|
Assert.True(result == 2, GetTestName());
|
||||||
|
var updatedDocuments = SUT.GetAll<T, TKey>(x => docIds.Contains(x.Id), PartitionKey);
|
||||||
|
|
||||||
|
Assert.True(updatedDocuments.Count == 2);
|
||||||
|
updatedDocuments.ForEach(updatedDocument =>
|
||||||
|
{
|
||||||
|
Assert.True(childrenToAdd[0].Type == updatedDocument.Children[0].Type, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[0].Value == updatedDocument.Children[0].Value, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[1].Type == updatedDocument.Children[1].Type, GetTestName());
|
||||||
|
Assert.True(childrenToAdd[1].Value == updatedDocument.Children[1].Value, GetTestName());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endregion Update Many
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -13,10 +13,6 @@
|
|||||||
<assemblyIdentity name="System.Runtime.InteropServices.RuntimeInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
<assemblyIdentity name="System.Runtime.InteropServices.RuntimeInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
|
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
|
||||||
</dependentAssembly>
|
</dependentAssembly>
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
|
|
||||||
</dependentAssembly>
|
|
||||||
</assemblyBinding>
|
</assemblyBinding>
|
||||||
</runtime>
|
</runtime>
|
||||||
</configuration>
|
</configuration>
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="..\packages\NUnit3TestAdapter.3.15.1\build\net35\NUnit3TestAdapter.props" Condition="Exists('..\packages\NUnit3TestAdapter.3.15.1\build\net35\NUnit3TestAdapter.props')" />
|
||||||
|
<Import Project="..\packages\NUnit.3.12.0\build\NUnit.props" Condition="Exists('..\packages\NUnit.3.12.0\build\NUnit.props')" />
|
||||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
@@ -11,6 +13,8 @@
|
|||||||
<AssemblyName>IntegrationTests</AssemblyName>
|
<AssemblyName>IntegrationTests</AssemblyName>
|
||||||
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<NuGetPackageImportStamp>
|
||||||
|
</NuGetPackageImportStamp>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
@@ -30,20 +34,32 @@
|
|||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Reference Include="Crc32C.NET, Version=1.0.5.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Crc32C.NET.1.0.5.0\lib\net20\Crc32C.NET.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="DnsClient, Version=1.2.0.0, Culture=neutral, PublicKeyToken=4574bb5573c51424, processorArchitecture=MSIL">
|
<Reference Include="DnsClient, Version=1.2.0.0, Culture=neutral, PublicKeyToken=4574bb5573c51424, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\DnsClient.1.2.0\lib\net45\DnsClient.dll</HintPath>
|
<HintPath>..\packages\DnsClient.1.2.0\lib\net45\DnsClient.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="MongoDB.Bson, Version=2.8.0.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="MongoDB.Bson, Version=2.9.3.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\MongoDB.Bson.2.8.0\lib\net452\MongoDB.Bson.dll</HintPath>
|
<HintPath>..\packages\MongoDB.Bson.2.9.3\lib\net452\MongoDB.Bson.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="MongoDB.Driver, Version=2.8.0.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="MongoDB.Driver, Version=2.9.3.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\MongoDB.Driver.2.8.0\lib\net452\MongoDB.Driver.dll</HintPath>
|
<HintPath>..\packages\MongoDB.Driver.2.9.3\lib\net452\MongoDB.Driver.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="MongoDB.Driver.Core, Version=2.8.0.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="MongoDB.Driver.Core, Version=2.9.3.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\MongoDB.Driver.Core.2.8.0\lib\net452\MongoDB.Driver.Core.dll</HintPath>
|
<HintPath>..\packages\MongoDB.Driver.Core.2.9.3\lib\net452\MongoDB.Driver.Core.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="nunit.framework, Version=3.9.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
|
<Reference Include="MongoDbGenericRepository, Version=1.4.5.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\NUnit.3.9.0\lib\net45\nunit.framework.dll</HintPath>
|
<HintPath>..\packages\MongoDbGenericRepository.1.4.5\lib\net452\MongoDbGenericRepository.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="nunit.framework, Version=3.12.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\NUnit.3.12.0\lib\net45\nunit.framework.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="SharpCompress, Version=0.23.0.0, Culture=neutral, PublicKeyToken=afb0a02973931d96, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\SharpCompress.0.23.0\lib\net45\SharpCompress.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Snappy.NET, Version=1.1.1.8, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Snappy.NET.1.1.1.8\lib\net45\Snappy.NET.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Buffers, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
<Reference Include="System.Buffers, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
@@ -85,11 +101,11 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
|
<Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
|
||||||
<ProjectReference Include="..\MongoDbGenericRepository\MongoDbGenericRepository.csproj">
|
|
||||||
<Project>{efc776c4-2af3-440c-be80-3fbe335817a5}</Project>
|
|
||||||
<Name>MongoDbGenericRepository</Name>
|
|
||||||
</ProjectReference>
|
|
||||||
</ItemGroup>
|
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
|
<PropertyGroup>
|
||||||
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Error Condition="!Exists('..\packages\NUnit3TestAdapter.3.15.1\build\net35\NUnit3TestAdapter.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NUnit3TestAdapter.3.15.1\build\net35\NUnit3TestAdapter.props'))" />
|
||||||
|
</Target>
|
||||||
</Project>
|
</Project>
|
||||||
@@ -1,11 +1,16 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
|
<package id="Crc32C.NET" version="1.0.5.0" targetFramework="net461" />
|
||||||
<package id="DnsClient" version="1.2.0" targetFramework="net461" />
|
<package id="DnsClient" version="1.2.0" targetFramework="net461" />
|
||||||
<package id="MongoDB.Bson" version="2.8.0" targetFramework="net461" />
|
<package id="MongoDB.Bson" version="2.9.3" targetFramework="net461" />
|
||||||
<package id="MongoDB.Driver" version="2.8.0" targetFramework="net461" />
|
<package id="MongoDB.Driver" version="2.9.3" targetFramework="net461" />
|
||||||
<package id="MongoDB.Driver.Core" version="2.8.0" targetFramework="net461" />
|
<package id="MongoDB.Driver.Core" version="2.9.3" targetFramework="net461" />
|
||||||
<package id="NUnit" version="3.9.0" targetFramework="net461" />
|
<package id="MongoDbGenericRepository" version="1.4.5" targetFramework="net461" />
|
||||||
<package id="NUnit.ConsoleRunner" version="3.7.0" targetFramework="net461" />
|
<package id="NUnit" version="3.12.0" targetFramework="net461" />
|
||||||
|
<package id="NUnit.ConsoleRunner" version="3.10.0" targetFramework="net461" />
|
||||||
|
<package id="NUnit3TestAdapter" version="3.15.1" targetFramework="net461" />
|
||||||
|
<package id="SharpCompress" version="0.23.0" targetFramework="net461" />
|
||||||
|
<package id="Snappy.NET" version="1.1.1.8" targetFramework="net461" />
|
||||||
<package id="System.Buffers" version="4.4.0" targetFramework="net461" />
|
<package id="System.Buffers" version="4.4.0" targetFramework="net461" />
|
||||||
<package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net461" />
|
<package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net461" />
|
||||||
</packages>
|
</packages>
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
<SolutionConfiguration>
|
|
||||||
<Settings>
|
|
||||||
<CurrentEngineMode>Run all tests automatically [Global]</CurrentEngineMode>
|
|
||||||
</Settings>
|
|
||||||
</SolutionConfiguration>
|
|
||||||
@@ -0,0 +1,242 @@
|
|||||||
|
using MongoDB.Driver;
|
||||||
|
using MongoDbGenericRepository.Models;
|
||||||
|
using System;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace MongoDbGenericRepository
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The IBaseMongoRepository_Update interface exposing update functionality for documents with Guid Ids.
|
||||||
|
/// </summary>
|
||||||
|
public interface IBaseMongoRepository_Update : IBaseMongoRepository_Update<Guid>
|
||||||
|
{
|
||||||
|
/// <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>
|
||||||
|
/// 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>
|
||||||
|
Task<bool> UpdateOneAsync<TDocument, TKey>(TDocument documentToModify, UpdateDefinition<TDocument> update)
|
||||||
|
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>
|
||||||
|
/// 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 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>
|
||||||
|
/// 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 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 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>
|
||||||
|
/// 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>
|
||||||
|
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 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, 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="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, 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, 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="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, TKey>(Expression<Func<TDocument, bool>> 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, 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="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, TKey>(Expression<Func<TDocument, bool>> filter, UpdateDefinition<TDocument> updateDefinition, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<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>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for 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, TKey>(FilterDefinition<TDocument> filter, UpdateDefinition<TDocument> updateDefinition, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,169 @@
|
|||||||
|
using System;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using MongoDB.Driver;
|
||||||
|
using MongoDbGenericRepository.Models;
|
||||||
|
|
||||||
|
namespace MongoDbGenericRepository.DataAccess.Update
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The IBaseMongoRepository_Update_ClientSession interface exposing update functionality with a IClientSessionHandle.
|
||||||
|
/// </summary>
|
||||||
|
public interface IBaseMongoRepository_Update_ClientSession
|
||||||
|
{
|
||||||
|
/// <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>A boolean value indicating success.</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>
|
||||||
|
/// 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>A boolean value indicating success.</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="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>A boolean value indicating success.</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>
|
||||||
|
/// <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>A boolean value indicating success.</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>A boolean value indicating success.</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="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>A boolean value indicating success.</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>
|
||||||
|
/// <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="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>A boolean value indicating success.</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>
|
||||||
|
/// <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>A boolean value indicating success.</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>A boolean value indicating success.</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>;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,6 +4,7 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace MongoDbGenericRepository
|
namespace MongoDbGenericRepository
|
||||||
@@ -32,7 +33,8 @@ namespace MongoDbGenericRepository
|
|||||||
/// <typeparam name="TKey">The type of the primary key for 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="id">The Id of the document you want to get.</param>
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
Task<TDocument> GetByIdAsync<TDocument, TKey>(TKey id, string partitionKey = null)
|
/// <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 TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>;
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
@@ -54,7 +56,8 @@ namespace MongoDbGenericRepository
|
|||||||
/// <typeparam name="TKey">The type of the primary key for 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="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
Task<TDocument> GetOneAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
/// <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 TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>;
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
@@ -88,7 +91,8 @@ namespace MongoDbGenericRepository
|
|||||||
/// <typeparam name="TKey">The type of the primary key for 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="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
Task<bool> AnyAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
/// <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 TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>;
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
@@ -110,7 +114,8 @@ namespace MongoDbGenericRepository
|
|||||||
/// <typeparam name="TKey">The type of the primary key for 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="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
Task<List<TDocument>> GetAllAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
/// <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 TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>;
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
@@ -132,7 +137,8 @@ namespace MongoDbGenericRepository
|
|||||||
/// <typeparam name="TKey">The type of the primary key for 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="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="partitionKey">An optional partitionKey</param>
|
/// <param name="partitionKey">An optional partitionKey</param>
|
||||||
Task<long> CountAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
/// <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 TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>;
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
@@ -157,9 +163,13 @@ namespace MongoDbGenericRepository
|
|||||||
/// <typeparam name="TDocument">The document type.</typeparam>
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
/// <param name="filter">A LINQ expression filter.</param>
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="orderByDescending">A property selector to order by descending.</param>
|
/// <param name="maxValueSelector">A property selector to order by descending.</param>
|
||||||
/// <param name="partitionKey">An optional partitionKey.</param>
|
/// <param name="partitionKey">An optional partitionKey.</param>
|
||||||
Task<TDocument> GetByMaxAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, object>> orderByDescending, string partitionKey = null)
|
/// <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 TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>;
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
@@ -181,9 +191,13 @@ namespace MongoDbGenericRepository
|
|||||||
/// <typeparam name="TDocument">The document type.</typeparam>
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
/// <param name="filter">A LINQ expression filter.</param>
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="orderByAscending">A property selector to order by ascending.</param>
|
/// <param name="minValueSelector">A property selector for the minimum value you are looking for.</param>
|
||||||
/// <param name="partitionKey">An optional partitionKey.</param>
|
/// <param name="partitionKey">An optional partitionKey.</param>
|
||||||
Task<TDocument> GetByMinAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, object>> orderByAscending, string partitionKey = null)
|
/// <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 TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>;
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
@@ -193,9 +207,9 @@ namespace MongoDbGenericRepository
|
|||||||
/// <typeparam name="TDocument">The document type.</typeparam>
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
/// <param name="filter">A LINQ expression filter.</param>
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="orderByAscending">A property selector to order by ascending.</param>
|
/// <param name="minValueSelector">A property selector for the minimum value you are looking for.</param>
|
||||||
/// <param name="partitionKey">An optional partitionKey.</param>
|
/// <param name="partitionKey">An optional partitionKey.</param>
|
||||||
TDocument GetByMin<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, object>> orderByAscending, string partitionKey = null)
|
TDocument GetByMin<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, object>> minValueSelector, string partitionKey = null)
|
||||||
where TDocument : IDocument<TKey>
|
where TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>;
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
@@ -206,9 +220,14 @@ namespace MongoDbGenericRepository
|
|||||||
/// <typeparam name="TKey">The type of the primary key.</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>
|
/// <typeparam name="TValue">The type of the value used to order the query.</typeparam>
|
||||||
/// <param name="filter">A LINQ expression filter.</param>
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="orderByAscending">A property selector to order by ascending.</param>
|
/// <param name="maxValueSelector">A property selector for the maximum value you are looking for.</param>
|
||||||
/// <param name="partitionKey">An optional partitionKey.</param>
|
/// <param name="partitionKey">An optional partitionKey.</param>
|
||||||
Task<TValue> GetMaxValueAsync<TDocument, TKey, TValue>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TValue>> orderByAscending, string partitionKey = null)
|
/// <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 TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>;
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
@@ -219,9 +238,9 @@ namespace MongoDbGenericRepository
|
|||||||
/// <typeparam name="TKey">The type of the primary key.</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>
|
/// <typeparam name="TValue">The type of the value used to order the query.</typeparam>
|
||||||
/// <param name="filter">A LINQ expression filter.</param>
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="orderByDescending">A property selector to order by ascending.</param>
|
/// <param name="maxValueSelector">A property selector to order by ascending.</param>
|
||||||
/// <param name="partitionKey">An optional partitionKey.</param>
|
/// <param name="partitionKey">An optional partitionKey.</param>
|
||||||
TValue GetMaxValue<TDocument, TKey, TValue>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TValue>> orderByDescending, string partitionKey = null)
|
TValue GetMaxValue<TDocument, TKey, TValue>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TValue>> maxValueSelector, string partitionKey = null)
|
||||||
where TDocument : IDocument<TKey>
|
where TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>;
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
@@ -234,7 +253,12 @@ namespace MongoDbGenericRepository
|
|||||||
/// <param name="filter">A LINQ expression filter.</param>
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="minValueSelector">A property selector to order by ascending.</param>
|
/// <param name="minValueSelector">A property selector to order by ascending.</param>
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
Task<TValue> GetMinValueAsync<TDocument, TKey, TValue>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TValue>> minValueSelector, string partitionKey = null)
|
/// <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 TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>;
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
@@ -263,9 +287,11 @@ namespace MongoDbGenericRepository
|
|||||||
/// <param name="filter">A LINQ expression filter.</param>
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="selector">The field you want to sum.</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="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,
|
Task<int> SumByAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter,
|
||||||
Expression<Func<TDocument, int>> selector,
|
Expression<Func<TDocument, int>> selector,
|
||||||
string partitionKey = null)
|
string partitionKey = null,
|
||||||
|
CancellationToken cancellationToken = default)
|
||||||
where TDocument : IDocument<TKey>
|
where TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>;
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
@@ -321,10 +347,15 @@ namespace MongoDbGenericRepository
|
|||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
/// <typeparam name="TKey">The type of the primary key for 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>
|
/// <typeparam name="TProjection">The type representing the model you want to project to.</typeparam>
|
||||||
/// <param name="filter"></param>
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="projection">The projection expression.</param>
|
/// <param name="projection">The projection expression.</param>
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
Task<TProjection> ProjectOneAsync<TDocument, TProjection, TKey>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TProjection>> projection, string partitionKey = null)
|
/// <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 TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
where TProjection : class;
|
where TProjection : class;
|
||||||
@@ -349,13 +380,18 @@ namespace MongoDbGenericRepository
|
|||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
/// <typeparam name="TKey">The type of the primary key for 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>
|
/// <typeparam name="TProjection">The type representing the model you want to project to.</typeparam>
|
||||||
/// <param name="filter"></param>
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="projection">The projection expression.</param>
|
/// <param name="projection">The projection expression.</param>
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
Task<List<TProjection>> ProjectManyAsync<TDocument, TProjection, TKey>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TProjection>> projection, string partitionKey = null)
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
where TDocument : IDocument<TKey>
|
Task<List<TProjection>> ProjectManyAsync<TDocument, TProjection, TKey>(
|
||||||
where TKey : IEquatable<TKey>
|
Expression<Func<TDocument, bool>> filter,
|
||||||
where TProjection : class;
|
Expression<Func<TDocument, TProjection>> projection,
|
||||||
|
string partitionKey = null,
|
||||||
|
CancellationToken cancellationToken = default)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>
|
||||||
|
where TProjection : class;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Asynchronously returns a list of projected documents matching the filter condition.
|
/// Asynchronously returns a list of projected documents matching the filter condition.
|
||||||
@@ -450,12 +486,14 @@ namespace MongoDbGenericRepository
|
|||||||
/// <param name="skipNumber">The number of documents you want to skip. Default value is 0.</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="takeNumber">The number of documents you want to take. Default value is 50.</param>
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
Task<List<TDocument>> GetSortedPaginatedAsync<TDocument, TKey>(
|
Task<List<TDocument>> GetSortedPaginatedAsync<TDocument, TKey>(
|
||||||
Expression<Func<TDocument, bool>> filter,
|
Expression<Func<TDocument, bool>> filter,
|
||||||
SortDefinition<TDocument> sortDefinition,
|
SortDefinition<TDocument> sortDefinition,
|
||||||
int skipNumber = 0,
|
int skipNumber = 0,
|
||||||
int takeNumber = 50,
|
int takeNumber = 50,
|
||||||
string partitionKey = null)
|
string partitionKey = null,
|
||||||
|
CancellationToken cancellationToken = default)
|
||||||
where TDocument : IDocument<TKey>
|
where TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>;
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
|
|||||||
@@ -335,5 +335,47 @@ namespace MongoDbGenericRepository
|
|||||||
where TProjection : class, new();
|
where TProjection : class, new();
|
||||||
|
|
||||||
#endregion Group By
|
#endregion Group By
|
||||||
|
|
||||||
|
#region Pagination
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
Task<List<TDocument>> GetSortedPaginatedAsync<TDocument>(
|
||||||
|
Expression<Func<TDocument, bool>> filter,
|
||||||
|
Expression<Func<TDocument, object>> sortSelector,
|
||||||
|
bool ascending = true,
|
||||||
|
int skipNumber = 0,
|
||||||
|
int takeNumber = 50,
|
||||||
|
string partitionKey = null)
|
||||||
|
where TDocument : IDocument<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>
|
||||||
|
Task<List<TDocument>> GetSortedPaginatedAsync<TDocument>(
|
||||||
|
Expression<Func<TDocument, bool>> filter,
|
||||||
|
SortDefinition<TDocument> sortDefinition,
|
||||||
|
int skipNumber = 0,
|
||||||
|
int takeNumber = 50,
|
||||||
|
string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
|
#endregion Pagination
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2,10 +2,15 @@
|
|||||||
using MongoDbGenericRepository.Models;
|
using MongoDbGenericRepository.Models;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
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>
|
public interface IBaseMongoRepository_Create : IBaseMongoRepository_Create<Guid>
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -15,7 +20,8 @@ namespace MongoDbGenericRepository
|
|||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
/// <typeparam name="TKey">The type of the primary key for 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="document">The document you want to add.</param>
|
||||||
Task AddOneAsync<TDocument, TKey>(TDocument document)
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
Task AddOneAsync<TDocument, TKey>(TDocument document, CancellationToken cancellationToken = default)
|
||||||
where TDocument : IDocument<TKey>
|
where TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>;
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
@@ -37,7 +43,8 @@ namespace MongoDbGenericRepository
|
|||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
/// <typeparam name="TKey">The type of the primary key for 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="documents">The documents you want to add.</param>
|
||||||
Task AddManyAsync<TDocument, TKey>(IEnumerable<TDocument> documents)
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
Task AddManyAsync<TDocument, TKey>(IEnumerable<TDocument> documents, CancellationToken cancellationToken = default)
|
||||||
where TDocument : IDocument<TKey>
|
where TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>;
|
where TKey : IEquatable<TKey>;
|
||||||
|
|
||||||
@@ -61,7 +68,11 @@ namespace MongoDbGenericRepository
|
|||||||
{
|
{
|
||||||
private readonly object _initLock = new object();
|
private readonly object _initLock = new object();
|
||||||
private MongoDbCreator _mongoDbCreator;
|
private MongoDbCreator _mongoDbCreator;
|
||||||
protected MongoDbCreator MongoDbCreator
|
|
||||||
|
/// <summary>
|
||||||
|
/// The MongoDbCreator field.
|
||||||
|
/// </summary>
|
||||||
|
protected virtual MongoDbCreator MongoDbCreator
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
@@ -77,6 +88,7 @@ namespace MongoDbGenericRepository
|
|||||||
|
|
||||||
return _mongoDbCreator;
|
return _mongoDbCreator;
|
||||||
}
|
}
|
||||||
|
set { _mongoDbCreator = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -86,11 +98,12 @@ namespace MongoDbGenericRepository
|
|||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
/// <typeparam name="TKey">The type of the primary key for 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="document">The document you want to add.</param>
|
||||||
public virtual async Task AddOneAsync<TDocument, TKey>(TDocument document)
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
public virtual async Task AddOneAsync<TDocument, TKey>(TDocument document, CancellationToken cancellationToken = default)
|
||||||
where TDocument : IDocument<TKey>
|
where TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
{
|
{
|
||||||
await MongoDbCreator.AddOneAsync<TDocument, TKey>(document);
|
await MongoDbCreator.AddOneAsync<TDocument, TKey>(document, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -99,10 +112,11 @@ namespace MongoDbGenericRepository
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
/// <param name="document">The document you want to add.</param>
|
/// <param name="document">The document you want to add.</param>
|
||||||
public virtual async Task AddOneAsync<TDocument>(TDocument document)
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
public virtual async Task AddOneAsync<TDocument>(TDocument document, CancellationToken cancellationToken = default)
|
||||||
where TDocument : IDocument<Guid>
|
where TDocument : IDocument<Guid>
|
||||||
{
|
{
|
||||||
await MongoDbCreator.AddOneAsync<TDocument, Guid>(document);
|
await MongoDbCreator.AddOneAsync<TDocument, Guid>(document, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -137,11 +151,12 @@ namespace MongoDbGenericRepository
|
|||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
/// <typeparam name="TKey">The type of the primary key for 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="documents">The documents you want to add.</param>
|
||||||
public virtual async Task AddManyAsync<TDocument, TKey>(IEnumerable<TDocument> documents)
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
public virtual async Task AddManyAsync<TDocument, TKey>(IEnumerable<TDocument> documents, CancellationToken cancellationToken = default)
|
||||||
where TDocument : IDocument<TKey>
|
where TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
{
|
{
|
||||||
await MongoDbCreator.AddManyAsync<TDocument, TKey>(documents);
|
await MongoDbCreator.AddManyAsync<TDocument, TKey>(documents, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -150,10 +165,11 @@ namespace MongoDbGenericRepository
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
/// <param name="documents">The documents you want to add.</param>
|
/// <param name="documents">The documents you want to add.</param>
|
||||||
public virtual async Task AddManyAsync<TDocument>(IEnumerable<TDocument> documents)
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
public virtual async Task AddManyAsync<TDocument>(IEnumerable<TDocument> documents, CancellationToken cancellationToken = default)
|
||||||
where TDocument : IDocument<Guid>
|
where TDocument : IDocument<Guid>
|
||||||
{
|
{
|
||||||
await MongoDbCreator.AddManyAsync<TDocument, Guid>(documents);
|
await MongoDbCreator.AddManyAsync<TDocument, Guid>(documents, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -105,7 +105,7 @@ namespace MongoDbGenericRepository
|
|||||||
public abstract partial class BaseMongoRepository : IBaseMongoRepository_Delete
|
public abstract partial class BaseMongoRepository : IBaseMongoRepository_Delete
|
||||||
{
|
{
|
||||||
private MongoDbEraser _mongoDbEraser;
|
private MongoDbEraser _mongoDbEraser;
|
||||||
protected MongoDbEraser MongoDbEraser
|
protected virtual MongoDbEraser MongoDbEraser
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
@@ -121,6 +121,7 @@ namespace MongoDbGenericRepository
|
|||||||
|
|
||||||
return _mongoDbEraser;
|
return _mongoDbEraser;
|
||||||
}
|
}
|
||||||
|
set { _mongoDbEraser = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Delete
|
#region Delete
|
||||||
|
|||||||
@@ -113,7 +113,7 @@ namespace MongoDbGenericRepository
|
|||||||
public abstract partial class BaseMongoRepository : IBaseMongoRepository_Index
|
public abstract partial class BaseMongoRepository : IBaseMongoRepository_Index
|
||||||
{
|
{
|
||||||
private MongoDbIndexHandler _mongoDbIndexHandler;
|
private MongoDbIndexHandler _mongoDbIndexHandler;
|
||||||
protected MongoDbIndexHandler MongoDbIndexHandler
|
protected virtual MongoDbIndexHandler MongoDbIndexHandler
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
@@ -128,6 +128,7 @@ namespace MongoDbGenericRepository
|
|||||||
}
|
}
|
||||||
return _mongoDbIndexHandler;
|
return _mongoDbIndexHandler;
|
||||||
}
|
}
|
||||||
|
set { _mongoDbIndexHandler = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -316,4 +317,4 @@ namespace MongoDbGenericRepository
|
|||||||
await MongoDbIndexHandler.DropIndexAsync<TDocument, TKey>(indexName, partitionKey);
|
await MongoDbIndexHandler.DropIndexAsync<TDocument, TKey>(indexName, partitionKey);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,197 @@
|
|||||||
|
using MongoDB.Driver;
|
||||||
|
using MongoDbGenericRepository.DataAccess.Update;
|
||||||
|
using MongoDbGenericRepository.Models;
|
||||||
|
using System;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace MongoDbGenericRepository
|
||||||
|
{
|
||||||
|
public abstract partial class BaseMongoRepository : IBaseMongoRepository_Update_ClientSession
|
||||||
|
{
|
||||||
|
/// <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>A boolean value indicating success.</returns>
|
||||||
|
public virtual async Task<bool> UpdateOneAsync<TDocument, TKey>(IClientSessionHandle session, TDocument modifiedDocument, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>
|
||||||
|
{
|
||||||
|
return await MongoDbUpdater.UpdateOneAsync<TDocument, TKey>(session, modifiedDocument, cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>A boolean value indicating success.</returns>
|
||||||
|
public virtual bool UpdateOne<TDocument, TKey>(IClientSessionHandle session, TDocument modifiedDocument, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>
|
||||||
|
{
|
||||||
|
return MongoDbUpdater.UpdateOne<TDocument, TKey>(session, modifiedDocument, cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>A boolean value indicating success.</returns>
|
||||||
|
public virtual async Task<bool> UpdateOneAsync<TDocument, TKey>(IClientSessionHandle session, TDocument documentToModify, UpdateDefinition<TDocument> update, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>
|
||||||
|
{
|
||||||
|
return await MongoDbUpdater.UpdateOneAsync<TDocument, TKey>(session, documentToModify, update, cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>A boolean value indicating success.</returns>
|
||||||
|
public virtual bool UpdateOne<TDocument, TKey>(IClientSessionHandle session, TDocument documentToModify, UpdateDefinition<TDocument> update, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>
|
||||||
|
{
|
||||||
|
return MongoDbUpdater.UpdateOne<TDocument, TKey>(session, documentToModify, update, cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>A boolean value indicating success.</returns>
|
||||||
|
public virtual async 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>
|
||||||
|
{
|
||||||
|
return await MongoDbUpdater.UpdateOneAsync<TDocument, TKey, TField>(session, documentToModify, field, value, cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>A boolean value indicating success.</returns>
|
||||||
|
public virtual 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>
|
||||||
|
{
|
||||||
|
return MongoDbUpdater.UpdateOne<TDocument, TKey, TField>(session, documentToModify, field, value, cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>A boolean value indicating success.</returns>
|
||||||
|
public virtual async 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>
|
||||||
|
{
|
||||||
|
return await MongoDbUpdater.UpdateOneAsync<TDocument, TKey, TField>(session, filter, field, value, partitionKey, cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>A boolean value indicating success.</returns>
|
||||||
|
public virtual async 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>
|
||||||
|
{
|
||||||
|
return await MongoDbUpdater.UpdateOneAsync<TDocument, TKey, TField>(session, filter, field, value, partitionKey, cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>A boolean value indicating success.</returns>
|
||||||
|
public virtual 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>
|
||||||
|
{
|
||||||
|
return MongoDbUpdater.UpdateOne<TDocument, TKey, TField>(session, filter, field, value, partitionKey, cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>A boolean value indicating success.</returns>
|
||||||
|
public virtual 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>
|
||||||
|
{
|
||||||
|
return UpdateOne<TDocument, TKey, TField>(session, Builders<TDocument>.Filter.Where(filter), field, value, partitionKey, cancellationToken);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,132 +7,6 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace MongoDbGenericRepository
|
namespace MongoDbGenericRepository
|
||||||
{
|
{
|
||||||
public interface IBaseMongoRepository_Update : IBaseMongoRepository_Update<Guid>
|
|
||||||
{
|
|
||||||
/// <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>
|
|
||||||
/// 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>
|
|
||||||
Task<bool> UpdateOneAsync<TDocument, TKey>(TDocument documentToModify, UpdateDefinition<TDocument> update)
|
|
||||||
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>
|
|
||||||
/// 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 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>
|
|
||||||
/// 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 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 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>
|
|
||||||
/// 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>
|
|
||||||
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>
|
/// <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.
|
||||||
@@ -140,7 +14,7 @@ namespace MongoDbGenericRepository
|
|||||||
public abstract partial class BaseMongoRepository : IBaseMongoRepository_Update
|
public abstract partial class BaseMongoRepository : IBaseMongoRepository_Update
|
||||||
{
|
{
|
||||||
private MongoDbUpdater _mongoDbUpdater;
|
private MongoDbUpdater _mongoDbUpdater;
|
||||||
protected MongoDbUpdater MongoDbUpdater
|
protected virtual MongoDbUpdater MongoDbUpdater
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
@@ -156,6 +30,7 @@ namespace MongoDbGenericRepository
|
|||||||
|
|
||||||
return _mongoDbUpdater;
|
return _mongoDbUpdater;
|
||||||
}
|
}
|
||||||
|
set { _mongoDbUpdater = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Update
|
#region Update
|
||||||
@@ -293,6 +168,119 @@ namespace MongoDbGenericRepository
|
|||||||
return await MongoDbUpdater.UpdateOneAsync<TDocument, Guid, TField>(filter, field, value, partitionKey);
|
return await MongoDbUpdater.UpdateOneAsync<TDocument, Guid, TField>(filter, field, value, partitionKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public virtual async Task<long> UpdateManyAsync<TDocument, TField>(FilterDefinition<TDocument> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<Guid>
|
||||||
|
{
|
||||||
|
return await MongoDbUpdater.UpdateManyAsync<TDocument, Guid, TField>(filter, field, value, partitionKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public virtual async Task<long> UpdateManyAsync<TDocument, TField>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<Guid>
|
||||||
|
{
|
||||||
|
return await MongoDbUpdater.UpdateManyAsync<TDocument, Guid, TField>(filter, field, value, partitionKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for 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>
|
||||||
|
public virtual async Task<long> UpdateManyAsync<TDocument>(FilterDefinition<TDocument> filter, UpdateDefinition<TDocument> updateDefinition, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<Guid>
|
||||||
|
{
|
||||||
|
return await MongoDbUpdater.UpdateManyAsync<TDocument, Guid>(filter, updateDefinition, partitionKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public async Task<long> UpdateManyAsync<TDocument>(Expression<Func<TDocument, bool>> filter, UpdateDefinition<TDocument> updateDefinition, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<Guid>
|
||||||
|
{
|
||||||
|
return await MongoDbUpdater.UpdateManyAsync<TDocument, Guid>(filter, updateDefinition, partitionKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public virtual long UpdateMany<TDocument, TField>(FilterDefinition<TDocument> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<Guid>
|
||||||
|
{
|
||||||
|
return MongoDbUpdater.UpdateMany<TDocument, Guid, TField>(filter, field, value, partitionKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public virtual long UpdateMany<TDocument, TField>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<Guid>
|
||||||
|
{
|
||||||
|
return MongoDbUpdater.UpdateMany<TDocument, Guid, TField>(filter, field, value, partitionKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public virtual long UpdateMany<TDocument>(FilterDefinition<TDocument> filter, UpdateDefinition<TDocument> updateDefinition, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<Guid>
|
||||||
|
{
|
||||||
|
return MongoDbUpdater.UpdateMany<TDocument, Guid>(filter, updateDefinition, partitionKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public long UpdateMany<TDocument>(Expression<Func<TDocument, bool>> filter, UpdateDefinition<TDocument> updateDefinition, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<Guid>
|
||||||
|
{
|
||||||
|
return MongoDbUpdater.UpdateMany<TDocument, Guid>(filter, updateDefinition, partitionKey);
|
||||||
|
}
|
||||||
|
|
||||||
#endregion Update
|
#endregion Update
|
||||||
|
|
||||||
#region Update TKey
|
#region Update TKey
|
||||||
@@ -451,6 +439,134 @@ namespace MongoDbGenericRepository
|
|||||||
return await MongoDbUpdater.UpdateOneAsync<TDocument, TKey, TField>(Builders<TDocument>.Filter.Where(filter), field, value, partitionKey);
|
return await MongoDbUpdater.UpdateOneAsync<TDocument, TKey, TField>(Builders<TDocument>.Filter.Where(filter), field, value, partitionKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public virtual async 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>
|
||||||
|
{
|
||||||
|
return await MongoDbUpdater.UpdateManyAsync<TDocument, TKey, TField>(filter, field, value, partitionKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public virtual async 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>
|
||||||
|
{
|
||||||
|
return await MongoDbUpdater.UpdateManyAsync<TDocument, TKey, TField>(filter, field, value, partitionKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for 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>
|
||||||
|
public virtual async Task<long> UpdateManyAsync<TDocument, TKey>(FilterDefinition<TDocument> filter, UpdateDefinition<TDocument> updateDefinition, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>
|
||||||
|
{
|
||||||
|
return await MongoDbUpdater.UpdateManyAsync<TDocument, TKey>(filter, updateDefinition, partitionKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for 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>
|
||||||
|
public virtual async Task<long> UpdateManyAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, UpdateDefinition<TDocument> updateDefinition, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>
|
||||||
|
{
|
||||||
|
return await MongoDbUpdater.UpdateManyAsync<TDocument, TKey>(filter, updateDefinition, partitionKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public virtual 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>
|
||||||
|
{
|
||||||
|
return MongoDbUpdater.UpdateMany<TDocument, TKey, TField>(filter, field, value, partitionKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public virtual 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>
|
||||||
|
{
|
||||||
|
return MongoDbUpdater.UpdateMany<TDocument, TKey, TField>(filter, field, value, partitionKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for 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>
|
||||||
|
public virtual long UpdateMany<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, UpdateDefinition<TDocument> updateDefinition, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>
|
||||||
|
{
|
||||||
|
return MongoDbUpdater.UpdateMany<TDocument, TKey>(filter, updateDefinition, partitionKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for 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>
|
||||||
|
public virtual long UpdateMany<TDocument, TKey>(FilterDefinition<TDocument> filter, UpdateDefinition<TDocument> updateDefinition, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>
|
||||||
|
{
|
||||||
|
return MongoDbUpdater.UpdateMany<TDocument, TKey>(filter, updateDefinition, partitionKey);
|
||||||
|
}
|
||||||
|
|
||||||
#endregion Update
|
#endregion Update
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,10 +7,20 @@ using System.Linq.Expressions;
|
|||||||
|
|
||||||
namespace MongoDbGenericRepository.DataAccess.Base
|
namespace MongoDbGenericRepository.DataAccess.Base
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// A base class for accessing the Database and its Collections.
|
||||||
|
/// </summary>
|
||||||
public class DataAccessBase
|
public class DataAccessBase
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The MongoDbContext
|
||||||
|
/// </summary>
|
||||||
protected IMongoDbContext MongoDbContext;
|
protected IMongoDbContext MongoDbContext;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The constructor of the DataAccessBase class
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="mongoDbContext"></param>
|
||||||
public DataAccessBase(IMongoDbContext mongoDbContext)
|
public DataAccessBase(IMongoDbContext mongoDbContext)
|
||||||
{
|
{
|
||||||
MongoDbContext = mongoDbContext;
|
MongoDbContext = mongoDbContext;
|
||||||
@@ -18,6 +28,14 @@ namespace MongoDbGenericRepository.DataAccess.Base
|
|||||||
|
|
||||||
#region Utility Methods
|
#region Utility Methods
|
||||||
|
|
||||||
|
/// <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>
|
||||||
public virtual IMongoQueryable<TDocument> GetQuery<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
public virtual IMongoQueryable<TDocument> GetQuery<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
||||||
where TDocument : IDocument<TKey>
|
where TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
@@ -108,7 +126,6 @@ namespace MongoDbGenericRepository.DataAccess.Base
|
|||||||
LanguageOverride = indexCreationOptions.LanguageOverride,
|
LanguageOverride = indexCreationOptions.LanguageOverride,
|
||||||
ExpireAfter = indexCreationOptions.ExpireAfter,
|
ExpireAfter = indexCreationOptions.ExpireAfter,
|
||||||
DefaultLanguage = indexCreationOptions.DefaultLanguage,
|
DefaultLanguage = indexCreationOptions.DefaultLanguage,
|
||||||
BucketSize = indexCreationOptions.BucketSize,
|
|
||||||
Bits = indexCreationOptions.Bits,
|
Bits = indexCreationOptions.Bits,
|
||||||
Background = indexCreationOptions.Background,
|
Background = indexCreationOptions.Background,
|
||||||
Version = indexCreationOptions.Version
|
Version = indexCreationOptions.Version
|
||||||
|
|||||||
@@ -6,12 +6,20 @@ using MongoDbGenericRepository.Utils;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace MongoDbGenericRepository.DataAccess.Create
|
namespace MongoDbGenericRepository.DataAccess.Create
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// A class to insert MongoDb document.
|
||||||
|
/// </summary>
|
||||||
public class MongoDbCreator : DataAccessBase
|
public class MongoDbCreator : DataAccessBase
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The construct of the MongoDbCreator class.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="mongoDbContext">A <see cref="IMongoDbContext"/> instance.</param>
|
||||||
public MongoDbCreator(IMongoDbContext mongoDbContext) : base(mongoDbContext)
|
public MongoDbCreator(IMongoDbContext mongoDbContext) : base(mongoDbContext)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -25,12 +33,13 @@ namespace MongoDbGenericRepository.DataAccess.Create
|
|||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
/// <typeparam name="TKey">The type of the primary key for 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="document">The document you want to add.</param>
|
||||||
public virtual async Task AddOneAsync<TDocument, TKey>(TDocument document)
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
public virtual async Task AddOneAsync<TDocument, TKey>(TDocument document, CancellationToken cancellationToken = default)
|
||||||
where TDocument : IDocument<TKey>
|
where TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
{
|
{
|
||||||
FormatDocument<TDocument, TKey>(document);
|
FormatDocument<TDocument, TKey>(document);
|
||||||
await HandlePartitioned<TDocument, TKey>(document).InsertOneAsync(document);
|
await HandlePartitioned<TDocument, TKey>(document).InsertOneAsync(document, null, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -55,7 +64,8 @@ namespace MongoDbGenericRepository.DataAccess.Create
|
|||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
/// <typeparam name="TKey">The type of the primary key for 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="documents">The documents you want to add.</param>
|
||||||
public virtual async Task AddManyAsync<TDocument, TKey>(IEnumerable<TDocument> documents)
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
public virtual async Task AddManyAsync<TDocument, TKey>(IEnumerable<TDocument> documents, CancellationToken cancellationToken = default)
|
||||||
where TDocument : IDocument<TKey>
|
where TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
{
|
{
|
||||||
@@ -72,12 +82,12 @@ namespace MongoDbGenericRepository.DataAccess.Create
|
|||||||
{
|
{
|
||||||
foreach (var group in documents.GroupBy(e => ((IPartitionedDocument)e).PartitionKey))
|
foreach (var group in documents.GroupBy(e => ((IPartitionedDocument)e).PartitionKey))
|
||||||
{
|
{
|
||||||
await HandlePartitioned<TDocument, TKey>(group.FirstOrDefault()).InsertManyAsync(group.ToList());
|
await HandlePartitioned<TDocument, TKey>(group.FirstOrDefault()).InsertManyAsync(group.ToList(), null, cancellationToken);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
await GetCollection<TDocument, TKey>().InsertManyAsync(documents.ToList());
|
await GetCollection<TDocument, TKey>().InsertManyAsync(documents.ToList(), null, cancellationToken);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,12 +6,20 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace MongoDbGenericRepository.DataAccess.Read
|
namespace MongoDbGenericRepository.DataAccess.Read
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// A class to read MongoDb document.
|
||||||
|
/// </summary>
|
||||||
public partial class MongoDbReader : DataAccessBase
|
public partial class MongoDbReader : DataAccessBase
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The construct of the MongoDbReader class.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="mongoDbContext">A <see cref="IMongoDbContext"/> instance.</param>
|
||||||
public MongoDbReader(IMongoDbContext mongoDbContext) : base(mongoDbContext)
|
public MongoDbReader(IMongoDbContext mongoDbContext) : base(mongoDbContext)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -25,12 +33,13 @@ namespace MongoDbGenericRepository.DataAccess.Read
|
|||||||
/// <typeparam name="TKey">The type of the primary key for 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="id">The Id of the document you want to get.</param>
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
public async virtual Task<TDocument> GetByIdAsync<TDocument, TKey>(TKey id, string partitionKey = null)
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
public async virtual Task<TDocument> GetByIdAsync<TDocument, TKey>(TKey id, string partitionKey = null, CancellationToken cancellationToken = default)
|
||||||
where TDocument : IDocument<TKey>
|
where TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
{
|
{
|
||||||
var filter = Builders<TDocument>.Filter.Eq("Id", id);
|
var filter = Builders<TDocument>.Filter.Eq("Id", id);
|
||||||
return await HandlePartitioned<TDocument, TKey>(partitionKey).Find(filter).FirstOrDefaultAsync();
|
return await HandlePartitioned<TDocument, TKey>(partitionKey).Find(filter).FirstOrDefaultAsync(cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -55,11 +64,12 @@ namespace MongoDbGenericRepository.DataAccess.Read
|
|||||||
/// <typeparam name="TKey">The type of the primary key for 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="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
public async virtual Task<TDocument> GetOneAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
public async virtual Task<TDocument> GetOneAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null, CancellationToken cancellationToken = default)
|
||||||
where TDocument : IDocument<TKey>
|
where TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
{
|
{
|
||||||
return await HandlePartitioned<TDocument, TKey>(partitionKey).Find(filter).FirstOrDefaultAsync();
|
return await HandlePartitioned<TDocument, TKey>(partitionKey).Find(filter).FirstOrDefaultAsync(cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -97,11 +107,12 @@ namespace MongoDbGenericRepository.DataAccess.Read
|
|||||||
/// <typeparam name="TKey">The type of the primary key for 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="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
public async virtual Task<bool> AnyAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
public async virtual Task<bool> AnyAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null, CancellationToken cancellationToken = default)
|
||||||
where TDocument : IDocument<TKey>
|
where TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
{
|
{
|
||||||
var count = await HandlePartitioned<TDocument, TKey>(partitionKey).CountDocumentsAsync(filter);
|
var count = await HandlePartitioned<TDocument, TKey>(partitionKey).CountDocumentsAsync(filter, cancellationToken: cancellationToken);
|
||||||
return (count > 0);
|
return (count > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -127,11 +138,12 @@ namespace MongoDbGenericRepository.DataAccess.Read
|
|||||||
/// <typeparam name="TKey">The type of the primary key for 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="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
public async virtual Task<List<TDocument>> GetAllAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
public async virtual Task<List<TDocument>> GetAllAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null, CancellationToken cancellationToken = default)
|
||||||
where TDocument : IDocument<TKey>
|
where TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
{
|
{
|
||||||
return await HandlePartitioned<TDocument, TKey>(partitionKey).Find(filter).ToListAsync();
|
return await HandlePartitioned<TDocument, TKey>(partitionKey).Find(filter).ToListAsync(cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -155,11 +167,12 @@ namespace MongoDbGenericRepository.DataAccess.Read
|
|||||||
/// <typeparam name="TKey">The type of the primary key for 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="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="partitionKey">An optional partitionKey</param>
|
/// <param name="partitionKey">An optional partitionKey</param>
|
||||||
public async virtual Task<long> CountAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
public async virtual Task<long> CountAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null, CancellationToken cancellationToken = default)
|
||||||
where TDocument : IDocument<TKey>
|
where TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
{
|
{
|
||||||
return await HandlePartitioned<TDocument, TKey>(partitionKey).CountDocumentsAsync(filter);
|
return await HandlePartitioned<TDocument, TKey>(partitionKey).CountDocumentsAsync(filter, cancellationToken: cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -188,14 +201,15 @@ namespace MongoDbGenericRepository.DataAccess.Read
|
|||||||
/// <param name="filter">A LINQ expression filter.</param>
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="maxValueSelector">A property selector to order by descending.</param>
|
/// <param name="maxValueSelector">A property selector to order by descending.</param>
|
||||||
/// <param name="partitionKey">An optional partitionKey.</param>
|
/// <param name="partitionKey">An optional partitionKey.</param>
|
||||||
public async virtual Task<TDocument> GetByMaxAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, object>> maxValueSelector, string partitionKey = null)
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
public async virtual 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 TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
{
|
{
|
||||||
return await GetCollection<TDocument, TKey>(partitionKey).Find(Builders<TDocument>.Filter.Where(filter))
|
return await GetCollection<TDocument, TKey>(partitionKey).Find(Builders<TDocument>.Filter.Where(filter))
|
||||||
.SortByDescending(maxValueSelector)
|
.SortByDescending(maxValueSelector)
|
||||||
.Limit(1)
|
.Limit(1)
|
||||||
.FirstOrDefaultAsync();
|
.FirstOrDefaultAsync(cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -224,14 +238,15 @@ namespace MongoDbGenericRepository.DataAccess.Read
|
|||||||
/// <param name="filter">A LINQ expression filter.</param>
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="minValueSelector">A property selector to order by ascending.</param>
|
/// <param name="minValueSelector">A property selector to order by ascending.</param>
|
||||||
/// <param name="partitionKey">An optional partitionKey.</param>
|
/// <param name="partitionKey">An optional partitionKey.</param>
|
||||||
public async virtual Task<TDocument> GetByMinAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, object>> minValueSelector, string partitionKey = null)
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
public async virtual 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 TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
{
|
{
|
||||||
return await GetCollection<TDocument, TKey>(partitionKey).Find(Builders<TDocument>.Filter.Where(filter))
|
return await GetCollection<TDocument, TKey>(partitionKey).Find(Builders<TDocument>.Filter.Where(filter))
|
||||||
.SortBy(minValueSelector)
|
.SortBy(minValueSelector)
|
||||||
.Limit(1)
|
.Limit(1)
|
||||||
.FirstOrDefaultAsync();
|
.FirstOrDefaultAsync(cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -257,16 +272,18 @@ namespace MongoDbGenericRepository.DataAccess.Read
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="TDocument">The document type.</typeparam>
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
/// <typeparam name="TKey">The type of the primary key.</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="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="orderByAscending">A property selector to order by ascending.</param>
|
/// <param name="maxValueSelector">A property selector to order by ascending.</param>
|
||||||
/// <param name="partitionKey">An optional partitionKey.</param>
|
/// <param name="partitionKey">An optional partitionKey.</param>
|
||||||
public async virtual Task<TValue> GetMaxValueAsync<TDocument, TKey, TValue>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TValue>> maxValueSelector, string partitionKey = null)
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
public async virtual 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 TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
{
|
{
|
||||||
return await GetMaxMongoQuery<TDocument, TKey, TValue>(filter, maxValueSelector, partitionKey)
|
return await GetMaxMongoQuery<TDocument, TKey, TValue>(filter, maxValueSelector, partitionKey)
|
||||||
.Project(maxValueSelector)
|
.Project(maxValueSelector)
|
||||||
.FirstOrDefaultAsync();
|
.FirstOrDefaultAsync(cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -296,11 +313,12 @@ namespace MongoDbGenericRepository.DataAccess.Read
|
|||||||
/// <param name="filter">A LINQ expression filter.</param>
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="minValueSelector">A property selector to order by ascending.</param>
|
/// <param name="minValueSelector">A property selector to order by ascending.</param>
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
public virtual async Task<TValue> GetMinValueAsync<TDocument, TKey, TValue>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TValue>> minValueSelector, string partitionKey = null)
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
public virtual async 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 TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
{
|
{
|
||||||
return await GetMinMongoQuery<TDocument, TKey, TValue>(filter, minValueSelector, partitionKey).Project(minValueSelector).FirstOrDefaultAsync();
|
return await GetMinMongoQuery<TDocument, TKey, TValue>(filter, minValueSelector, partitionKey).Project(minValueSelector).FirstOrDefaultAsync(cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -332,13 +350,15 @@ namespace MongoDbGenericRepository.DataAccess.Read
|
|||||||
/// <param name="filter">A LINQ expression filter.</param>
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="selector">The field you want to sum.</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="partitionKey">The partition key of your document, if any.</param>
|
||||||
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
public virtual async Task<int> SumByAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter,
|
public virtual async Task<int> SumByAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter,
|
||||||
Expression<Func<TDocument, int>> selector,
|
Expression<Func<TDocument, int>> selector,
|
||||||
string partitionKey = null)
|
string partitionKey = null,
|
||||||
|
CancellationToken cancellationToken = default)
|
||||||
where TDocument : IDocument<TKey>
|
where TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
{
|
{
|
||||||
return await GetQuery<TDocument, TKey>(filter, partitionKey).SumAsync(selector);
|
return await GetQuery<TDocument, TKey>(filter, partitionKey).SumAsync(selector, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -366,13 +386,14 @@ namespace MongoDbGenericRepository.DataAccess.Read
|
|||||||
/// <param name="filter">A LINQ expression filter.</param>
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="selector">The field you want to sum.</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="partitionKey">The partition key of your document, if any.</param>
|
||||||
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
public virtual async Task<decimal> SumByAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter,
|
public virtual async Task<decimal> SumByAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter,
|
||||||
Expression<Func<TDocument, decimal>> selector,
|
Expression<Func<TDocument, decimal>> selector,
|
||||||
string partitionKey = null)
|
string partitionKey = null, CancellationToken cancellationToken = default)
|
||||||
where TDocument : IDocument<TKey>
|
where TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
{
|
{
|
||||||
return await GetQuery<TDocument, TKey>(filter, partitionKey).SumAsync(selector);
|
return await GetQuery<TDocument, TKey>(filter, partitionKey).SumAsync(selector, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -451,6 +472,36 @@ namespace MongoDbGenericRepository.DataAccess.Read
|
|||||||
.ToList();
|
.ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public virtual async 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()
|
||||||
|
{
|
||||||
|
var collection = HandlePartitioned<TDocument, TKey>(partitionKey);
|
||||||
|
return await collection.Aggregate()
|
||||||
|
.Match(Builders<TDocument>.Filter.Where(filter))
|
||||||
|
.Group(selector, projection)
|
||||||
|
.ToListAsync(cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Asynchronously returns a paginated list of the documents matching the filter condition.
|
/// Asynchronously returns a paginated list of the documents matching the filter condition.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -462,13 +513,15 @@ namespace MongoDbGenericRepository.DataAccess.Read
|
|||||||
/// <param name="skipNumber">The number of documents you want to skip. Default value is 0.</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="takeNumber">The number of documents you want to take. Default value is 50.</param>
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
public virtual async Task<List<TDocument>> GetSortedPaginatedAsync<TDocument, TKey>(
|
public virtual async Task<List<TDocument>> GetSortedPaginatedAsync<TDocument, TKey>(
|
||||||
Expression<Func<TDocument, bool>> filter,
|
Expression<Func<TDocument, bool>> filter,
|
||||||
Expression<Func<TDocument, object>> sortSelector,
|
Expression<Func<TDocument, object>> sortSelector,
|
||||||
bool ascending = true,
|
bool ascending = true,
|
||||||
int skipNumber = 0,
|
int skipNumber = 0,
|
||||||
int takeNumber = 50,
|
int takeNumber = 50,
|
||||||
string partitionKey = null)
|
string partitionKey = null,
|
||||||
|
CancellationToken cancellationToken = default)
|
||||||
where TDocument : IDocument<TKey>
|
where TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
{
|
{
|
||||||
@@ -481,7 +534,7 @@ namespace MongoDbGenericRepository.DataAccess.Read
|
|||||||
.Sort(sorting)
|
.Sort(sorting)
|
||||||
.Skip(skipNumber)
|
.Skip(skipNumber)
|
||||||
.Limit(takeNumber)
|
.Limit(takeNumber)
|
||||||
.ToListAsync();
|
.ToListAsync(cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -494,12 +547,14 @@ namespace MongoDbGenericRepository.DataAccess.Read
|
|||||||
/// <param name="skipNumber">The number of documents you want to skip. Default value is 0.</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="takeNumber">The number of documents you want to take. Default value is 50.</param>
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
public virtual async Task<List<TDocument>> GetSortedPaginatedAsync<TDocument, TKey>(
|
public virtual async Task<List<TDocument>> GetSortedPaginatedAsync<TDocument, TKey>(
|
||||||
Expression<Func<TDocument, bool>> filter,
|
Expression<Func<TDocument, bool>> filter,
|
||||||
SortDefinition<TDocument> sortDefinition,
|
SortDefinition<TDocument> sortDefinition,
|
||||||
int skipNumber = 0,
|
int skipNumber = 0,
|
||||||
int takeNumber = 50,
|
int takeNumber = 50,
|
||||||
string partitionKey = null)
|
string partitionKey = null,
|
||||||
|
CancellationToken cancellationToken = default)
|
||||||
where TDocument : IDocument<TKey>
|
where TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
{
|
{
|
||||||
@@ -508,7 +563,7 @@ namespace MongoDbGenericRepository.DataAccess.Read
|
|||||||
.Sort(sortDefinition)
|
.Sort(sortDefinition)
|
||||||
.Skip(skipNumber)
|
.Skip(skipNumber)
|
||||||
.Limit(takeNumber)
|
.Limit(takeNumber)
|
||||||
.ToListAsync();
|
.ToListAsync(cancellationToken);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace MongoDbGenericRepository.DataAccess.Read
|
namespace MongoDbGenericRepository.DataAccess.Read
|
||||||
@@ -20,14 +21,19 @@ namespace MongoDbGenericRepository.DataAccess.Read
|
|||||||
/// <param name="filter">A LINQ expression filter.</param>
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="projection">The projection expression.</param>
|
/// <param name="projection">The projection expression.</param>
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
public virtual async Task<TProjection> ProjectOneAsync<TDocument, TProjection, TKey>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TProjection>> projection, string partitionKey = null)
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
public virtual async 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 TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
where TProjection : class
|
where TProjection : class
|
||||||
{
|
{
|
||||||
return await HandlePartitioned<TDocument, TKey>(partitionKey).Find(filter)
|
return await HandlePartitioned<TDocument, TKey>(partitionKey).Find(filter)
|
||||||
.Project(projection)
|
.Project(projection)
|
||||||
.FirstOrDefaultAsync();
|
.FirstOrDefaultAsync(cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -58,14 +64,19 @@ namespace MongoDbGenericRepository.DataAccess.Read
|
|||||||
/// <param name="filter">A LINQ expression filter.</param>
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="projection">The projection expression.</param>
|
/// <param name="projection">The projection expression.</param>
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
public virtual async Task<List<TProjection>> ProjectManyAsync<TDocument, TProjection, TKey>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TProjection>> projection, string partitionKey = null)
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
public virtual async 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 TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
where TProjection : class
|
where TProjection : class
|
||||||
{
|
{
|
||||||
return await HandlePartitioned<TDocument, TKey>(partitionKey).Find(filter)
|
return await HandlePartitioned<TDocument, TKey>(partitionKey).Find(filter)
|
||||||
.Project(projection)
|
.Project(projection)
|
||||||
.ToListAsync();
|
.ToListAsync(cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -0,0 +1,217 @@
|
|||||||
|
using MongoDB.Driver;
|
||||||
|
using MongoDbGenericRepository.Models;
|
||||||
|
using System;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace MongoDbGenericRepository.DataAccess.Update
|
||||||
|
{
|
||||||
|
public partial class MongoDbUpdater
|
||||||
|
{
|
||||||
|
/// <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>
|
||||||
|
public virtual async Task<bool> UpdateOneAsync<TDocument, TKey>(IClientSessionHandle session, TDocument modifiedDocument, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>
|
||||||
|
{
|
||||||
|
var filter = Builders<TDocument>.Filter.Eq("Id", modifiedDocument.Id);
|
||||||
|
var updateRes = await HandlePartitioned<TDocument, TKey>(modifiedDocument)
|
||||||
|
.ReplaceOneAsync(session, filter, modifiedDocument, cancellationToken: cancellationToken)
|
||||||
|
.ConfigureAwait(false);
|
||||||
|
return updateRes.ModifiedCount == 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public virtual bool UpdateOne<TDocument, TKey>(IClientSessionHandle session, TDocument modifiedDocument, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>
|
||||||
|
{
|
||||||
|
var filter = Builders<TDocument>.Filter.Eq("Id", modifiedDocument.Id);
|
||||||
|
var updateRes = HandlePartitioned<TDocument, TKey>(modifiedDocument).ReplaceOne(session, filter, modifiedDocument, cancellationToken: cancellationToken);
|
||||||
|
return updateRes.ModifiedCount == 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public virtual async Task<bool> UpdateOneAsync<TDocument, TKey>(IClientSessionHandle session, TDocument documentToModify, UpdateDefinition<TDocument> update, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>
|
||||||
|
{
|
||||||
|
var filter = Builders<TDocument>.Filter.Eq("Id", documentToModify.Id);
|
||||||
|
var updateRes = await HandlePartitioned<TDocument, TKey>(documentToModify).UpdateOneAsync(session, filter, update, null, cancellationToken).ConfigureAwait(false);
|
||||||
|
return updateRes.ModifiedCount == 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public virtual bool UpdateOne<TDocument, TKey>(IClientSessionHandle session, TDocument documentToModify, UpdateDefinition<TDocument> update, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>
|
||||||
|
{
|
||||||
|
var filter = Builders<TDocument>.Filter.Eq("Id", documentToModify.Id);
|
||||||
|
var updateRes = HandlePartitioned<TDocument, TKey>(documentToModify).UpdateOne(session, filter, update, null, cancellationToken);
|
||||||
|
return updateRes.ModifiedCount == 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public virtual async 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>
|
||||||
|
{
|
||||||
|
var filter = Builders<TDocument>.Filter.Eq("Id", documentToModify.Id);
|
||||||
|
var updateRes = await HandlePartitioned<TDocument, TKey>(documentToModify)
|
||||||
|
.UpdateOneAsync(session, filter, Builders<TDocument>.Update.Set(field, value), cancellationToken: cancellationToken)
|
||||||
|
.ConfigureAwait(false);
|
||||||
|
|
||||||
|
return updateRes.ModifiedCount == 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public virtual 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>
|
||||||
|
{
|
||||||
|
var filter = Builders<TDocument>.Filter.Eq("Id", documentToModify.Id);
|
||||||
|
var updateRes = HandlePartitioned<TDocument, TKey>(documentToModify).UpdateOne(session, filter, Builders<TDocument>.Update.Set(field, value), cancellationToken: cancellationToken);
|
||||||
|
return updateRes.ModifiedCount == 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public virtual async 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>
|
||||||
|
{
|
||||||
|
var collection = string.IsNullOrEmpty(partitionKey) ? GetCollection<TDocument, TKey>() : GetCollection<TDocument, TKey>(partitionKey);
|
||||||
|
var updateRes = await collection.UpdateOneAsync(session, filter, Builders<TDocument>.Update.Set(field, value), cancellationToken: cancellationToken).ConfigureAwait(false);
|
||||||
|
return updateRes.ModifiedCount == 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public virtual 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>
|
||||||
|
{
|
||||||
|
return UpdateOneAsync<TDocument, TKey, TField>(session, Builders<TDocument>.Filter.Where(filter), field, value, partitionKey, cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public virtual 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>
|
||||||
|
{
|
||||||
|
var collection = string.IsNullOrEmpty(partitionKey) ? GetCollection<TDocument, TKey>() : GetCollection<TDocument, TKey>(partitionKey);
|
||||||
|
var updateRes = collection.UpdateOne(session, filter, Builders<TDocument>.Update.Set(field, value), cancellationToken: cancellationToken);
|
||||||
|
return updateRes.ModifiedCount == 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public virtual 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>
|
||||||
|
{
|
||||||
|
return UpdateOne<TDocument, TKey, TField>(session, Builders<TDocument>.Filter.Where(filter), field, value, partitionKey, cancellationToken);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,17 +1,14 @@
|
|||||||
using MongoDB.Driver;
|
using MongoDB.Driver;
|
||||||
using MongoDB.Driver.Linq;
|
|
||||||
using MongoDbGenericRepository.DataAccess.Base;
|
using MongoDbGenericRepository.DataAccess.Base;
|
||||||
using MongoDbGenericRepository.Models;
|
using MongoDbGenericRepository.Models;
|
||||||
using MongoDbGenericRepository.Utils;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace MongoDbGenericRepository.DataAccess.Update
|
namespace MongoDbGenericRepository.DataAccess.Update
|
||||||
{
|
{
|
||||||
public class MongoDbUpdater : DataAccessBase
|
public partial class MongoDbUpdater : DataAccessBase
|
||||||
{
|
{
|
||||||
public MongoDbUpdater(IMongoDbContext mongoDbContext) : base(mongoDbContext)
|
public MongoDbUpdater(IMongoDbContext mongoDbContext) : base(mongoDbContext)
|
||||||
{
|
{
|
||||||
@@ -59,7 +56,7 @@ namespace MongoDbGenericRepository.DataAccess.Update
|
|||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
{
|
{
|
||||||
var filter = Builders<TDocument>.Filter.Eq("Id", documentToModify.Id);
|
var filter = Builders<TDocument>.Filter.Eq("Id", documentToModify.Id);
|
||||||
var updateRes = await HandlePartitioned<TDocument, TKey>(documentToModify).UpdateOneAsync(filter, update, new UpdateOptions { IsUpsert = true });
|
var updateRes = await HandlePartitioned<TDocument, TKey>(documentToModify).UpdateOneAsync(filter, update);
|
||||||
return updateRes.ModifiedCount == 1;
|
return updateRes.ModifiedCount == 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -75,7 +72,7 @@ namespace MongoDbGenericRepository.DataAccess.Update
|
|||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
{
|
{
|
||||||
var filter = Builders<TDocument>.Filter.Eq("Id", documentToModify.Id);
|
var filter = Builders<TDocument>.Filter.Eq("Id", documentToModify.Id);
|
||||||
var updateRes = HandlePartitioned<TDocument, TKey>(documentToModify).UpdateOne(filter, update, new UpdateOptions { IsUpsert = true });
|
var updateRes = HandlePartitioned<TDocument, TKey>(documentToModify).UpdateOne(filter, update);
|
||||||
return updateRes.ModifiedCount == 1;
|
return updateRes.ModifiedCount == 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -186,5 +183,129 @@ namespace MongoDbGenericRepository.DataAccess.Update
|
|||||||
{
|
{
|
||||||
return UpdateOne<TDocument, TKey, TField>(Builders<TDocument>.Filter.Where(filter), field, value, partitionKey);
|
return UpdateOne<TDocument, TKey, TField>(Builders<TDocument>.Filter.Where(filter), field, value, partitionKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public virtual async 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>
|
||||||
|
{
|
||||||
|
return await UpdateManyAsync<TDocument, TKey, TField>(Builders<TDocument>.Filter.Where(filter), field, value, partitionKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public virtual async 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>
|
||||||
|
{
|
||||||
|
var collection = string.IsNullOrEmpty(partitionKey) ? GetCollection<TDocument, TKey>() : GetCollection<TDocument, TKey>(partitionKey);
|
||||||
|
var updateRes = await collection.UpdateManyAsync(filter, Builders<TDocument>.Update.Set(field, value));
|
||||||
|
return updateRes.ModifiedCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public virtual async Task<long> UpdateManyAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, UpdateDefinition<TDocument> update, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>
|
||||||
|
{
|
||||||
|
return await UpdateManyAsync<TDocument, TKey>(Builders<TDocument>.Filter.Where(filter), update, partitionKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public virtual async Task<long> UpdateManyAsync<TDocument, TKey>(FilterDefinition<TDocument> filter, UpdateDefinition<TDocument> updateDefinition, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>
|
||||||
|
{
|
||||||
|
var collection = string.IsNullOrEmpty(partitionKey) ? GetCollection<TDocument, TKey>() : GetCollection<TDocument, TKey>(partitionKey);
|
||||||
|
var updateRes = await collection.UpdateManyAsync(filter, updateDefinition);
|
||||||
|
return updateRes.ModifiedCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public virtual 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>
|
||||||
|
{
|
||||||
|
return UpdateMany<TDocument, TKey, TField>(Builders<TDocument>.Filter.Where(filter), field, value, partitionKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public virtual 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>
|
||||||
|
{
|
||||||
|
var collection = string.IsNullOrEmpty(partitionKey) ? GetCollection<TDocument, TKey>() : GetCollection<TDocument, TKey>(partitionKey);
|
||||||
|
var updateRes = collection.UpdateMany(filter, Builders<TDocument>.Update.Set(field, value));
|
||||||
|
return updateRes.ModifiedCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public virtual long UpdateMany<TDocument, TKey>(FilterDefinition<TDocument> filter, UpdateDefinition<TDocument> UpdateDefinition, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
where TKey : IEquatable<TKey>
|
||||||
|
{
|
||||||
|
var collection = string.IsNullOrEmpty(partitionKey) ? GetCollection<TDocument, TKey>() : GetCollection<TDocument, TKey>(partitionKey);
|
||||||
|
var updateRes = collection.UpdateMany(filter, UpdateDefinition);
|
||||||
|
return updateRes.ModifiedCount;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
using MongoDbGenericRepository.Models;
|
using MongoDbGenericRepository.Models;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace MongoDbGenericRepository
|
namespace MongoDbGenericRepository
|
||||||
@@ -18,7 +19,8 @@ namespace MongoDbGenericRepository
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
/// <param name="document">The document you want to add.</param>
|
/// <param name="document">The document you want to add.</param>
|
||||||
Task AddOneAsync<TDocument>(TDocument document) where TDocument : IDocument<TKey>;
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
Task AddOneAsync<TDocument>(TDocument document, CancellationToken cancellationToken = default) where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Adds a document to the collection.
|
/// Adds a document to the collection.
|
||||||
@@ -34,7 +36,8 @@ namespace MongoDbGenericRepository
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
/// <param name="documents">The documents you want to add.</param>
|
/// <param name="documents">The documents you want to add.</param>
|
||||||
Task AddManyAsync<TDocument>(IEnumerable<TDocument> documents) where TDocument : IDocument<TKey>;
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
Task AddManyAsync<TDocument>(IEnumerable<TDocument> documents, CancellationToken cancellationToken = default) where TDocument : IDocument<TKey>;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Adds a list of documents to the collection.
|
/// Adds a list of documents to the collection.
|
||||||
@@ -56,7 +59,7 @@ namespace MongoDbGenericRepository
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// The MongoDb accessor to insert data.
|
/// The MongoDb accessor to insert data.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected MongoDbCreator MongoDbCreator
|
protected virtual MongoDbCreator MongoDbCreator
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
@@ -72,6 +75,7 @@ namespace MongoDbGenericRepository
|
|||||||
}
|
}
|
||||||
return _mongoDbCreator;
|
return _mongoDbCreator;
|
||||||
}
|
}
|
||||||
|
set { _mongoDbCreator = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -80,9 +84,10 @@ namespace MongoDbGenericRepository
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
/// <param name="document">The document you want to add.</param>
|
/// <param name="document">The document you want to add.</param>
|
||||||
public virtual async Task AddOneAsync<TDocument>(TDocument document) where TDocument : IDocument<TKey>
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
public virtual async Task AddOneAsync<TDocument>(TDocument document, CancellationToken cancellationToken = default) where TDocument : IDocument<TKey>
|
||||||
{
|
{
|
||||||
await MongoDbCreator.AddOneAsync<TDocument, TKey>(document);
|
await MongoDbCreator.AddOneAsync<TDocument, TKey>(document, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -102,9 +107,10 @@ namespace MongoDbGenericRepository
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
/// <typeparam name="TDocument">The type representing a Document.</typeparam>
|
||||||
/// <param name="documents">The documents you want to add.</param>
|
/// <param name="documents">The documents you want to add.</param>
|
||||||
public virtual async Task AddManyAsync<TDocument>(IEnumerable<TDocument> documents) where TDocument : IDocument<TKey>
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
public virtual async Task AddManyAsync<TDocument>(IEnumerable<TDocument> documents, CancellationToken cancellationToken = default) where TDocument : IDocument<TKey>
|
||||||
{
|
{
|
||||||
await MongoDbCreator.AddManyAsync<TDocument, TKey>(documents);
|
await MongoDbCreator.AddManyAsync<TDocument, TKey>(documents, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ namespace MongoDbGenericRepository
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// The MongoDb accessor to delete data.
|
/// The MongoDb accessor to delete data.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected MongoDbEraser MongoDbEraser
|
protected virtual MongoDbEraser MongoDbEraser
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
@@ -113,6 +113,7 @@ namespace MongoDbGenericRepository
|
|||||||
}
|
}
|
||||||
return _mongoDbEraser;
|
return _mongoDbEraser;
|
||||||
}
|
}
|
||||||
|
set { _mongoDbEraser = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ namespace MongoDbGenericRepository
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// The MongoDb accessor to manage indexes.
|
/// The MongoDb accessor to manage indexes.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected MongoDbIndexHandler MongoDbIndexHandler
|
protected virtual MongoDbIndexHandler MongoDbIndexHandler
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
@@ -124,6 +124,7 @@ namespace MongoDbGenericRepository
|
|||||||
}
|
}
|
||||||
return _mongoDbIndexHandler;
|
return _mongoDbIndexHandler;
|
||||||
}
|
}
|
||||||
|
set { _mongoDbIndexHandler = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -110,13 +110,101 @@ namespace MongoDbGenericRepository
|
|||||||
/// <param name="partitionKey">The partition key for the document.</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)
|
Task<bool> UpdateOneAsync<TDocument, TField>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null)
|
||||||
where TDocument : IDocument<TKey>;
|
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 MongoDbUpdater _mongoDbUpdater;
|
||||||
protected MongoDbUpdater MongoDbUpdater
|
protected virtual MongoDbUpdater MongoDbUpdater
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
@@ -132,6 +220,7 @@ namespace MongoDbGenericRepository
|
|||||||
|
|
||||||
return _mongoDbUpdater;
|
return _mongoDbUpdater;
|
||||||
}
|
}
|
||||||
|
set { _mongoDbUpdater = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -265,5 +354,116 @@ namespace MongoDbGenericRepository
|
|||||||
{
|
{
|
||||||
return await MongoDbUpdater.UpdateOneAsync<TDocument, TKey, TField>(filter, field, value, partitionKey);
|
return await MongoDbUpdater.UpdateOneAsync<TDocument, TKey, TField>(filter, field, value, partitionKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public virtual async Task<long> UpdateManyAsync<TDocument, TField>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
{
|
||||||
|
return await MongoDbUpdater.UpdateManyAsync<TDocument, TKey, TField>(filter, field, value, partitionKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public virtual async Task<long> UpdateManyAsync<TDocument, TField>(FilterDefinition<TDocument> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
{
|
||||||
|
return await MongoDbUpdater.UpdateManyAsync<TDocument, TKey, TField>(filter, field, value, partitionKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public virtual async Task<long> UpdateManyAsync<TDocument>(FilterDefinition<TDocument> filter, UpdateDefinition<TDocument> updateDefinition, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
{
|
||||||
|
return await MongoDbUpdater.UpdateManyAsync<TDocument, TKey>(filter, updateDefinition, partitionKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public virtual async Task<long> UpdateManyAsync<TDocument>(Expression<Func<TDocument, bool>> filter, UpdateDefinition<TDocument> updateDefinition, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
{
|
||||||
|
return await MongoDbUpdater.UpdateManyAsync<TDocument, TKey>(filter, updateDefinition, partitionKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public virtual long UpdateMany<TDocument, TField>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
{
|
||||||
|
return MongoDbUpdater.UpdateMany<TDocument, TKey, TField>(filter, field, value, partitionKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public virtual long UpdateMany<TDocument, TField>(FilterDefinition<TDocument> filter, Expression<Func<TDocument, TField>> field, TField value, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
{
|
||||||
|
return MongoDbUpdater.UpdateMany<TDocument, TKey, TField>(filter, field, value, partitionKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public virtual long UpdateMany<TDocument>(FilterDefinition<TDocument> filter, UpdateDefinition<TDocument> updateDefinition, string partitionKey = null)
|
||||||
|
where TDocument : IDocument<TKey>
|
||||||
|
{
|
||||||
|
return MongoDbUpdater.UpdateMany<TDocument, TKey>(filter, updateDefinition, partitionKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
|
public virtual long UpdateMany<TDocument>(Expression<Func<TDocument, bool>> filter, UpdateDefinition<TDocument> updateDefinition, string partitionKey = null) where TDocument : IDocument<TKey>
|
||||||
|
{
|
||||||
|
return MongoDbUpdater.UpdateMany<TDocument, TKey>(filter, updateDefinition, partitionKey);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
using MongoDB.Bson.Serialization.Attributes;
|
using System;
|
||||||
using System;
|
|
||||||
|
|
||||||
namespace MongoDbGenericRepository.Models
|
namespace MongoDbGenericRepository.Models
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -52,10 +52,6 @@ namespace MongoDbGenericRepository.Models
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string DefaultLanguage { get; set; }
|
public string DefaultLanguage { get; set; }
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the size of a geohash bucket.
|
|
||||||
/// </summary>
|
|
||||||
public double? BucketSize { get; set; }
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the precision, in bits, used with geohash indexes.
|
/// Gets or sets the precision, in bits, used with geohash indexes.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int? Bits { get; set; }
|
public int? Bits { get; set; }
|
||||||
|
|||||||
@@ -46,6 +46,15 @@ namespace MongoDbGenericRepository
|
|||||||
Database = Client.GetDatabase(databaseName);
|
Database = Client.GetDatabase(databaseName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initialise an instance of a <see cref="IMongoDbContext"/> using a connection string
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="connectionString"></param>
|
||||||
|
public MongoDbContext(string connectionString)
|
||||||
|
: this(connectionString, new MongoUrl(connectionString).DatabaseName)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The constructor of the MongoDbContext, it needs a connection string and a database name.
|
/// The constructor of the MongoDbContext, it needs a connection string and a database name.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -1,23 +1,31 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>net45;netstandard2.0;netstandard1.5;</TargetFrameworks>
|
<TargetFrameworks>net452;netstandard2.0;netstandard1.5;</TargetFrameworks>
|
||||||
|
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||||
<PackageId>MongoDbGenericRepository</PackageId>
|
<PackageId>MongoDbGenericRepository</PackageId>
|
||||||
<PackageVersion>1.2.0</PackageVersion>
|
<PackageVersion>1.4.6</PackageVersion>
|
||||||
<Authors>Alexandre Spieser</Authors>
|
<Authors>Alexandre Spieser</Authors>
|
||||||
|
<PackageTitle>MongoDb Generic Repository</PackageTitle>
|
||||||
<Description>A generic repository implementation using the MongoDB C# Sharp 2.0 driver.</Description>
|
<Description>A generic repository implementation using the MongoDB C# Sharp 2.0 driver.</Description>
|
||||||
|
<PackageLicenseUrl>http://www.opensource.org/licenses/mit-license.php</PackageLicenseUrl>
|
||||||
|
<PackageProjectUrl>http://www.opensource.org/licenses/mit-license.php</PackageProjectUrl>
|
||||||
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
|
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
|
||||||
<PackageReleaseNotes>.NET Core supported.</PackageReleaseNotes>
|
<PackageReleaseNotes>Release notes are at https://github.com/alexandre-spieser/mongodb-generic-repository/releases </PackageReleaseNotes>
|
||||||
<Copyright>Copyright 2017 (c) Alexandre Spieser. All rights reserved.</Copyright>
|
<Copyright>Copyright 2021 (c) Alexandre Spieser. All rights reserved.</Copyright>
|
||||||
<PackageTags>MongoDb Repository NoSql Generic</PackageTags>
|
<PackageTags>MongoDb Repository Generic NoSql</PackageTags>
|
||||||
|
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||||
|
<Version>1.4.6</Version>
|
||||||
|
<RepositoryUrl>https://github.com/alexandre-spieser/mongodb-generic-repository</RepositoryUrl>
|
||||||
|
<RepositoryType>Git</RepositoryType>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net45|AnyCPU'">
|
<PropertyGroup>
|
||||||
<DocumentationFile>bin\Release\net45\MongoDbGenericRepository.xml</DocumentationFile>
|
<DocumentationFile>bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml</DocumentationFile>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="MongoDB.Driver" Version="2.7.0" />
|
<PackageReference Include="MongoDB.Driver" Version="2.12.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<package >
|
<package >
|
||||||
<metadata>
|
<metadata>
|
||||||
<id>MongoDbGenericRepository</id>
|
<id>MongoDbGenericRepository</id>
|
||||||
<version>1.3.9</version>
|
<version>1.4.5</version>
|
||||||
<title>MongoDb Generic Repository</title>
|
<title>MongoDb Generic Repository</title>
|
||||||
<authors>Alexandre Spieser</authors>
|
<authors>Alexandre Spieser</authors>
|
||||||
<owners>Alexandre Spieser</owners>
|
<owners>Alexandre Spieser</owners>
|
||||||
@@ -11,10 +11,18 @@
|
|||||||
<requireLicenseAcceptance>false</requireLicenseAcceptance>
|
<requireLicenseAcceptance>false</requireLicenseAcceptance>
|
||||||
<description>A generic repository implementation using the MongoDB C# Sharp 2.0 driver.</description>
|
<description>A generic repository implementation using the MongoDB C# Sharp 2.0 driver.</description>
|
||||||
<releaseNotes>Release notes are at https://github.com/alexandre-spieser/mongodb-generic-repository/releases</releaseNotes>
|
<releaseNotes>Release notes are at https://github.com/alexandre-spieser/mongodb-generic-repository/releases</releaseNotes>
|
||||||
<copyright>Copyright 2019 (c) Alexandre Spieser. All rights reserved.</copyright>
|
<copyright>Copyright 2020 (c) Alexandre Spieser. All rights reserved.</copyright>
|
||||||
<tags>MongoDb Repository Generic NoSql</tags>
|
<tags>MongoDb Repository Generic NoSql</tags>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency id="MongoDB.Driver" version="2.7.0" />
|
<group targetFramework=".NETFramework4.5.2">
|
||||||
|
<dependency id="MongoDB.Driver" version="2.9.3" exclude="Build,Analyzers" />
|
||||||
|
</group>
|
||||||
|
<group targetFramework=".NETStandard1.5">
|
||||||
|
<dependency id="MongoDB.Driver" version="2.9.3" exclude="Build,Analyzers" />
|
||||||
|
</group>
|
||||||
|
<group targetFramework=".NETStandard2.0">
|
||||||
|
<dependency id="MongoDB.Driver" version="2.9.3" exclude="Build,Analyzers"/>
|
||||||
|
</group>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</metadata>
|
</metadata>
|
||||||
<files>
|
<files>
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -5,6 +5,7 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace MongoDbGenericRepository
|
namespace MongoDbGenericRepository
|
||||||
@@ -49,11 +50,12 @@ namespace MongoDbGenericRepository
|
|||||||
/// <typeparam name="TKey">The type of the primary key for 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="id">The Id of the document you want to get.</param>
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
public async virtual Task<TDocument> GetByIdAsync<TDocument, TKey>(TKey id, string partitionKey = null)
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
public async virtual Task<TDocument> GetByIdAsync<TDocument, TKey>(TKey id, string partitionKey = null, CancellationToken cancellationToken = default)
|
||||||
where TDocument : IDocument<TKey>
|
where TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
{
|
{
|
||||||
return await MongoDbReader.GetByIdAsync<TDocument, TKey>(id, partitionKey);
|
return await MongoDbReader.GetByIdAsync<TDocument, TKey>(id, partitionKey, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -77,11 +79,12 @@ namespace MongoDbGenericRepository
|
|||||||
/// <typeparam name="TKey">The type of the primary key for 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="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
public async virtual Task<TDocument> GetOneAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
public async virtual Task<TDocument> GetOneAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null, CancellationToken cancellationToken = default)
|
||||||
where TDocument : IDocument<TKey>
|
where TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
{
|
{
|
||||||
return await MongoDbReader.GetOneAsync<TDocument, TKey>(filter, partitionKey);
|
return await MongoDbReader.GetOneAsync<TDocument, TKey>(filter, partitionKey, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -119,11 +122,12 @@ namespace MongoDbGenericRepository
|
|||||||
/// <typeparam name="TKey">The type of the primary key for 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="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
public async virtual Task<bool> AnyAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
public async virtual Task<bool> AnyAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null, CancellationToken cancellationToken = default)
|
||||||
where TDocument : IDocument<TKey>
|
where TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
{
|
{
|
||||||
return await MongoDbReader.AnyAsync<TDocument, TKey>(filter, partitionKey);
|
return await MongoDbReader.AnyAsync<TDocument, TKey>(filter, partitionKey, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -147,11 +151,12 @@ namespace MongoDbGenericRepository
|
|||||||
/// <typeparam name="TKey">The type of the primary key for 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="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
public async virtual Task<List<TDocument>> GetAllAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
public async virtual Task<List<TDocument>> GetAllAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null, CancellationToken cancellationToken = default)
|
||||||
where TDocument : IDocument<TKey>
|
where TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
{
|
{
|
||||||
return await MongoDbReader.GetAllAsync<TDocument, TKey>(filter, partitionKey);
|
return await MongoDbReader.GetAllAsync<TDocument, TKey>(filter, partitionKey, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -175,11 +180,12 @@ namespace MongoDbGenericRepository
|
|||||||
/// <typeparam name="TKey">The type of the primary key for 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="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="partitionKey">An optional partitionKey</param>
|
/// <param name="partitionKey">An optional partitionKey</param>
|
||||||
public async virtual Task<long> CountAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null)
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
public async virtual Task<long> CountAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, string partitionKey = null, CancellationToken cancellationToken = default)
|
||||||
where TDocument : IDocument<TKey>
|
where TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
{
|
{
|
||||||
return await MongoDbReader.CountAsync<TDocument, TKey>(filter, partitionKey);
|
return await MongoDbReader.CountAsync<TDocument, TKey>(filter, partitionKey, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -204,11 +210,15 @@ namespace MongoDbGenericRepository
|
|||||||
/// <param name="filter">A LINQ expression filter.</param>
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="maxValueSelector">A property selector to order by descending.</param>
|
/// <param name="maxValueSelector">A property selector to order by descending.</param>
|
||||||
/// <param name="partitionKey">An optional partitionKey.</param>
|
/// <param name="partitionKey">An optional partitionKey.</param>
|
||||||
public async virtual Task<TDocument> GetByMaxAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, object>> maxValueSelector, string partitionKey = null)
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
public async virtual 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 TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
{
|
{
|
||||||
return await MongoDbReader.GetByMaxAsync<TDocument, TKey>(filter, maxValueSelector, partitionKey);
|
return await MongoDbReader.GetByMaxAsync<TDocument, TKey>(filter, maxValueSelector, partitionKey, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -232,13 +242,17 @@ namespace MongoDbGenericRepository
|
|||||||
/// <typeparam name="TDocument">The document type.</typeparam>
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
/// <param name="filter">A LINQ expression filter.</param>
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="minValueSelector">A property selector to order by ascending.</param>
|
/// <param name="minValueSelector">A property selector for the minimum value you are looking for.</param>
|
||||||
/// <param name="partitionKey">An optional partitionKey.</param>
|
/// <param name="partitionKey">An optional partitionKey.</param>
|
||||||
public async virtual Task<TDocument> GetByMinAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, object>> minValueSelector, string partitionKey = null)
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
public async virtual 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 TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
{
|
{
|
||||||
return await MongoDbReader.GetByMinAsync<TDocument, TKey>(filter, minValueSelector, partitionKey);
|
return await MongoDbReader.GetByMinAsync<TDocument, TKey>(filter, minValueSelector, partitionKey, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -247,7 +261,7 @@ namespace MongoDbGenericRepository
|
|||||||
/// <typeparam name="TDocument">The document type.</typeparam>
|
/// <typeparam name="TDocument">The document type.</typeparam>
|
||||||
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
/// <typeparam name="TKey">The type of the primary key.</typeparam>
|
||||||
/// <param name="filter">A LINQ expression filter.</param>
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="minValueSelector">A property selector to order by ascending.</param>
|
/// <param name="minValueSelector">A property selector for the minimum value you are looking for.</param>
|
||||||
/// <param name="partitionKey">An optional partitionKey.</param>
|
/// <param name="partitionKey">An optional partitionKey.</param>
|
||||||
public virtual TDocument GetByMin<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, object>> minValueSelector, string partitionKey = null)
|
public virtual TDocument GetByMin<TDocument, TKey>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, object>> minValueSelector, string partitionKey = null)
|
||||||
where TDocument : IDocument<TKey>
|
where TDocument : IDocument<TKey>
|
||||||
@@ -263,13 +277,18 @@ namespace MongoDbGenericRepository
|
|||||||
/// <typeparam name="TKey">The type of the primary key.</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>
|
/// <typeparam name="TValue">The type of the value used to order the query.</typeparam>
|
||||||
/// <param name="filter">A LINQ expression filter.</param>
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="maxValueSelector">A property selector to select the max value.</param>
|
/// <param name="maxValueSelector">A property selector for the maximum value you are looking for.</param>
|
||||||
/// <param name="partitionKey">An optional partitionKey.</param>
|
/// <param name="partitionKey">An optional partitionKey.</param>
|
||||||
public async virtual Task<TValue> GetMaxValueAsync<TDocument, TKey, TValue>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TValue>> maxValueSelector, string partitionKey = null)
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
public async virtual 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 TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
{
|
{
|
||||||
return await MongoDbReader.GetMaxValueAsync<TDocument, TKey, TValue>(filter, maxValueSelector, partitionKey);
|
return await MongoDbReader.GetMaxValueAsync<TDocument, TKey, TValue>(filter, maxValueSelector, partitionKey, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -297,11 +316,16 @@ namespace MongoDbGenericRepository
|
|||||||
/// <param name="filter">A LINQ expression filter.</param>
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="minValueSelector">A property selector to order by ascending.</param>
|
/// <param name="minValueSelector">A property selector to order by ascending.</param>
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
public virtual async Task<TValue> GetMinValueAsync<TDocument, TKey, TValue>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TValue>> minValueSelector, string partitionKey = null)
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
public virtual async 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 TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
{
|
{
|
||||||
return await MongoDbReader.GetMinValueAsync<TDocument, TKey, TValue>(filter, minValueSelector, partitionKey);
|
return await MongoDbReader.GetMinValueAsync<TDocument, TKey, TValue>(filter, minValueSelector, partitionKey, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -332,13 +356,15 @@ namespace MongoDbGenericRepository
|
|||||||
/// <param name="filter">A LINQ expression filter.</param>
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="selector">The field you want to sum.</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="partitionKey">The partition key of your document, if any.</param>
|
||||||
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
public virtual async Task<int> SumByAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter,
|
public virtual async Task<int> SumByAsync<TDocument, TKey>(Expression<Func<TDocument, bool>> filter,
|
||||||
Expression<Func<TDocument, int>> selector,
|
Expression<Func<TDocument, int>> selector,
|
||||||
string partitionKey = null)
|
string partitionKey = null,
|
||||||
|
CancellationToken cancellationToken = default)
|
||||||
where TDocument : IDocument<TKey>
|
where TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
{
|
{
|
||||||
return await MongoDbReader.SumByAsync<TDocument, TKey>(filter, selector, partitionKey);
|
return await MongoDbReader.SumByAsync<TDocument, TKey>(filter, selector, partitionKey, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -405,12 +431,17 @@ namespace MongoDbGenericRepository
|
|||||||
/// <param name="filter">A LINQ expression filter.</param>
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="projection">The projection expression.</param>
|
/// <param name="projection">The projection expression.</param>
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
public virtual async Task<TProjection> ProjectOneAsync<TDocument, TProjection, TKey>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TProjection>> projection, string partitionKey = null)
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
public virtual async 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 TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
where TProjection : class
|
where TProjection : class
|
||||||
{
|
{
|
||||||
return await MongoDbReader.ProjectOneAsync<TDocument, TProjection, TKey>(filter, projection, partitionKey);
|
return await MongoDbReader.ProjectOneAsync<TDocument, TProjection, TKey>(filter, projection, partitionKey, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -439,12 +470,16 @@ namespace MongoDbGenericRepository
|
|||||||
/// <param name="filter">A LINQ expression filter.</param>
|
/// <param name="filter">A LINQ expression filter.</param>
|
||||||
/// <param name="projection">The projection expression.</param>
|
/// <param name="projection">The projection expression.</param>
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
public virtual async Task<List<TProjection>> ProjectManyAsync<TDocument, TProjection, TKey>(Expression<Func<TDocument, bool>> filter, Expression<Func<TDocument, TProjection>> projection, string partitionKey = null)
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
|
public virtual async 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 TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
where TProjection : class
|
where TProjection : class
|
||||||
{
|
{
|
||||||
return await MongoDbReader.ProjectManyAsync<TDocument, TProjection, TKey>(filter, projection, partitionKey);
|
return await MongoDbReader.ProjectManyAsync<TDocument, TProjection, TKey>(filter, projection, partitionKey, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -562,12 +597,14 @@ namespace MongoDbGenericRepository
|
|||||||
/// <param name="skipNumber">The number of documents you want to skip. Default value is 0.</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="takeNumber">The number of documents you want to take. Default value is 50.</param>
|
||||||
/// <param name="partitionKey">An optional partition key.</param>
|
/// <param name="partitionKey">An optional partition key.</param>
|
||||||
|
/// <param name="cancellationToken">An optional cancellation Token.</param>
|
||||||
public virtual async Task<List<TDocument>> GetSortedPaginatedAsync<TDocument, TKey>(
|
public virtual async Task<List<TDocument>> GetSortedPaginatedAsync<TDocument, TKey>(
|
||||||
Expression<Func<TDocument, bool>> filter,
|
Expression<Func<TDocument, bool>> filter,
|
||||||
SortDefinition<TDocument> sortDefinition,
|
SortDefinition<TDocument> sortDefinition,
|
||||||
int skipNumber = 0,
|
int skipNumber = 0,
|
||||||
int takeNumber = 50,
|
int takeNumber = 50,
|
||||||
string partitionKey = null)
|
string partitionKey = null,
|
||||||
|
CancellationToken cancellationToken = default)
|
||||||
where TDocument : IDocument<TKey>
|
where TDocument : IDocument<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
{
|
{
|
||||||
@@ -576,7 +613,7 @@ namespace MongoDbGenericRepository
|
|||||||
.Sort(sortDefinition)
|
.Sort(sortDefinition)
|
||||||
.Skip(skipNumber)
|
.Skip(skipNumber)
|
||||||
.Limit(takeNumber)
|
.Limit(takeNumber)
|
||||||
.ToListAsync();
|
.ToListAsync(cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion Pagination
|
#endregion Pagination
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
+1724
-793
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@@ -1,13 +1,26 @@
|
|||||||
# MongoDbGenericRepository
|
# MongoDbGenericRepository
|
||||||
|
|
||||||
An example of generic repository implementation using the MongoDB C# Sharp 2.0 driver (async)
|
An example of generic repository implementation using the MongoDB C# Sharp 2.0 driver (async)
|
||||||
|
|
||||||
Now available as a nuget package:
|
Now available as a nuget package:
|
||||||
https://www.nuget.org/packages/MongoDbGenericRepository/
|
https://www.nuget.org/packages/MongoDbGenericRepository/
|
||||||
|
|
||||||
Covered by 200+ integration tests and counting.
|
Covered by 400+ integration tests and counting.
|
||||||
|
|
||||||
The MongoDbGenericRepository is also used in [AspNetCore.Identity.MongoDbCore](https://github.com/alexandre-spieser/AspNetCore.Identity.MongoDbCore).
|
The MongoDbGenericRepository is also used in [AspNetCore.Identity.MongoDbCore](https://github.com/alexandre-spieser/AspNetCore.Identity.MongoDbCore).
|
||||||
|
|
||||||
|
# Support This Project
|
||||||
|
|
||||||
|
If you have found this project helpful, either as a library that you use or as a learning tool, please consider buying Alex a coffee: <a href="https://www.buymeacoffee.com/zeitquest" target="_blank"><img height="40px" src="https://cdn.buymeacoffee.com/buttons/default-orange.png" alt="Buy Me A Coffee" style="max-height: 51px;width: 150px !important;" ></a>
|
||||||
|
|
||||||
|
# Worth Knowing
|
||||||
|
|
||||||
|
This package sets the `MongoDefaults.GuidRepresentation` to `MongoDB.Bson.GuidRepresentation.Standard` by default, instead of the default driver setting of `MongoDB.Bson.GuidRepresentation.CSharpLegacy`. This can cause issues if you have been using the driver on an existing application previously or if you are using CosmosDB.
|
||||||
|
|
||||||
|
You can override this behaviour to enforce legacy behaviour in your app Startup routine like so :
|
||||||
|
|
||||||
|
`MongoDbContext.SetGuidRepresentation(MongoDB.Bson.GuidRepresentation.CSharpLegacy)`. More info [here](https://github.com/alexandre-spieser/mongodb-generic-repository/issues/7).
|
||||||
|
|
||||||
# Usage examples
|
# Usage examples
|
||||||
|
|
||||||
This repository is meant to be inherited from.
|
This repository is meant to be inherited from.
|
||||||
@@ -40,6 +53,18 @@ Here is an example of repository usage, where the TestRepository is implementing
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
If all your documents have the same type of `Id`, you can use the more specific `BaseMongoRepository<TKey>` where `TKey` is the type of the `Id` of your documents.
|
||||||
|
```csharp
|
||||||
|
public class TestTKeyRepository<TKey> : BaseMongoRepository<TKey>, ITestRepository<TKey> where TKey : IEquatable<TKey>
|
||||||
|
{
|
||||||
|
const string connectionString = "mongodb://localhost:27017/MongoDbTests";
|
||||||
|
private static readonly ITestRepository<TKey> _instance = new TestTKeyRepository<TKey>(connectionString);
|
||||||
|
/// <inheritdoc />
|
||||||
|
private TestTKeyRepository(string connectionString) : base(connectionString)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## Instantiation
|
## Instantiation
|
||||||
|
|
||||||
@@ -47,6 +72,7 @@ The repository can be instantiated like so:
|
|||||||
|
|
||||||
```csharp
|
```csharp
|
||||||
ITestRepository testRepository = new TestRepository(connectionString, "MongoDbTests");
|
ITestRepository testRepository = new TestRepository(connectionString, "MongoDbTests");
|
||||||
|
ITestRepository<TKey> testTKeyRepository = new TestTKeyRepository<TKey>(connectionString);
|
||||||
```
|
```
|
||||||
|
|
||||||
If you prefer to reuse the same MongoDb database across your application, you can use the `MongoDatabase` from the MongoDb driver implementing the `IMongoDatabase` interface:
|
If you prefer to reuse the same MongoDb database across your application, you can use the `MongoDatabase` from the MongoDb driver implementing the `IMongoDatabase` interface:
|
||||||
@@ -145,7 +171,7 @@ It is now possible to change the collection name by using the `CollectionName` a
|
|||||||
Documents of this type will be inserted into a collection named "MyCollectionName".
|
Documents of this type will be inserted into a collection named "MyCollectionName".
|
||||||
|
|
||||||
## Index Management
|
## Index Management
|
||||||
From version 1.3.8 the `MongoDbGenericRepository` implements the `IMongoDbCollectionIndexRepository` interface.
|
From version 1.3.8 the `MongoDbGenericRepository` implements the `IBaseMongoRepository_Index` and `IBaseMongoRepository_Index<TKey>` interfaces.
|
||||||
This exposes the functionality to programmatically manage indexes against your collections in a generic fashion.
|
This exposes the functionality to programmatically manage indexes against your collections in a generic fashion.
|
||||||
|
|
||||||
The following methods are exposed and fully integration tested:
|
The following methods are exposed and fully integration tested:
|
||||||
|
|||||||
Reference in New Issue
Block a user