From 530309e9fc52d607cc43398ade288b6a5807a026 Mon Sep 17 00:00:00 2001 From: Alexandre SPIESER Date: Mon, 15 Apr 2019 00:26:10 +0100 Subject: [PATCH] added test suite for BaseMongoRepository --- .../CoreIntegrationTests.csproj | 5 +- .../Infrastructure/MongoDbDocumentTestBase.cs | 7 +- .../Infrastructure/TestRepository.cs | 38 +- .../Abstractions/IBaseMongoRepository.cs | 7 +- .../Abstractions/IBaseReadOnlyRepository.cs | 24 +- .../BaseMongoRepository.TKey.Create.cs | 11 +- .../BaseMongoRepository.TKey.Delete.cs | 24 +- .../BaseMongoRepository.TKey.Index.cs | 9 +- .../BaseMongoRepository.TKey.Main.cs | 13 +- .../MongoDbGenericRepository.nuspec | 4 +- .../ReadOnlyMongoRepository.cs | 15 +- .../lib/net45/MongoDbGenericRepository.dll | Bin 99328 -> 154112 bytes .../lib/net45/MongoDbGenericRepository.xml | 4330 +++++++++++------ .../MongoDbGenericRepository.deps.json | 178 +- .../MongoDbGenericRepository.dll | Bin 99840 -> 154624 bytes .../MongoDbGenericRepository.xml | 4330 +++++++++++------ .../MongoDbGenericRepository.deps.json | 170 +- .../MongoDbGenericRepository.dll | Bin 99328 -> 154112 bytes .../MongoDbGenericRepository.xml | 4330 +++++++++++------ 19 files changed, 9015 insertions(+), 4480 deletions(-) diff --git a/CoreIntegrationTests/CoreIntegrationTests.csproj b/CoreIntegrationTests/CoreIntegrationTests.csproj index 720179b..17b30e3 100644 --- a/CoreIntegrationTests/CoreIntegrationTests.csproj +++ b/CoreIntegrationTests/CoreIntegrationTests.csproj @@ -9,16 +9,13 @@ + - - - - ..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Configuration.dll diff --git a/CoreIntegrationTests/Infrastructure/MongoDbDocumentTestBase.cs b/CoreIntegrationTests/Infrastructure/MongoDbDocumentTestBase.cs index 105d7a8..2e2a108 100644 --- a/CoreIntegrationTests/Infrastructure/MongoDbDocumentTestBase.cs +++ b/CoreIntegrationTests/Infrastructure/MongoDbDocumentTestBase.cs @@ -1,4 +1,5 @@ -using MongoDbGenericRepository.Models; +using MongoDbGenericRepository; +using MongoDbGenericRepository.Models; using System; using System.Collections.Generic; using System.Diagnostics; @@ -30,7 +31,7 @@ namespace CoreIntegrationTests.Infrastructure _fixture.PartitionKey = PartitionKey; TestClassName = GetClassName(); MongoDbConfig.EnsureConfigured(); - SUT = TestRepository.Instance; + SUT = TestTKeyRepository.Instance; } protected T CreateTestDocument() @@ -63,7 +64,7 @@ namespace CoreIntegrationTests.Infrastructure /// /// SUT: System Under Test /// - protected static ITestRepository SUT { get; set; } + protected static ITestRepository SUT { get; set; } #region Add diff --git a/CoreIntegrationTests/Infrastructure/TestRepository.cs b/CoreIntegrationTests/Infrastructure/TestRepository.cs index 8b3145e..1ee0132 100644 --- a/CoreIntegrationTests/Infrastructure/TestRepository.cs +++ b/CoreIntegrationTests/Infrastructure/TestRepository.cs @@ -1,7 +1,43 @@ -using MongoDbGenericRepository; +using MongoDB.Bson; +using MongoDbGenericRepository; +using System; namespace CoreIntegrationTests.Infrastructure { + public interface ITestRepository : IBaseMongoRepository where TKey : IEquatable + { + void DropTestCollection(); + void DropTestCollection(string partitionKey); + } + + public class TestTKeyRepository : BaseMongoRepository, ITestRepository where TKey : IEquatable + { + const string connectionString = "mongodb://localhost:27017/MongoDbTests"; + private static readonly ITestRepository _instance = new TestTKeyRepository(connectionString); + /// + private TestTKeyRepository(string connectionString) : base(connectionString) + { + } + + public static ITestRepository Instance + { + get + { + return _instance; + } + } + + public void DropTestCollection() + { + MongoDbContext.DropCollection(); + } + + public void DropTestCollection(string partitionKey) + { + MongoDbContext.DropCollection(partitionKey); + } + } + /// /// A singleton implementation of the TestRepository /// diff --git a/MongoDbGenericRepository/Abstractions/IBaseMongoRepository.cs b/MongoDbGenericRepository/Abstractions/IBaseMongoRepository.cs index adfe39e..f163354 100644 --- a/MongoDbGenericRepository/Abstractions/IBaseMongoRepository.cs +++ b/MongoDbGenericRepository/Abstractions/IBaseMongoRepository.cs @@ -1,15 +1,14 @@ using MongoDB.Driver; +using MongoDbGenericRepository.Models; using System; using System.Collections.Generic; -using System.Threading.Tasks; using System.Linq.Expressions; -using MongoDbGenericRepository.Models; -using System.Linq; +using System.Threading.Tasks; namespace MongoDbGenericRepository { /// - /// The IBaseMongoRepository exposes the CRUD functionality of the BaseMongoRepository. + /// The IBaseMongoRepository interface exposes the CRUD functionality of the BaseMongoRepository. /// public interface IBaseMongoRepository : IReadOnlyMongoRepository, diff --git a/MongoDbGenericRepository/Abstractions/IBaseReadOnlyRepository.cs b/MongoDbGenericRepository/Abstractions/IBaseReadOnlyRepository.cs index 155a54c..1c4866d 100644 --- a/MongoDbGenericRepository/Abstractions/IBaseReadOnlyRepository.cs +++ b/MongoDbGenericRepository/Abstractions/IBaseReadOnlyRepository.cs @@ -8,6 +8,9 @@ using System.Threading.Tasks; namespace MongoDbGenericRepository { + /// + /// The IBaseReadOnlyRepository exposes the generic Read Only functionality of the BaseMongoRepository. + /// public interface IBaseReadOnlyRepository { /// @@ -154,7 +157,7 @@ namespace MongoDbGenericRepository /// The document type. /// The type of the primary key. /// A LINQ expression filter. - /// A property selector to order by descending. + /// A property selector to order by descending. /// An optional partitionKey. Task GetByMaxAsync(Expression> filter, Expression> orderByDescending, string partitionKey = null) where TDocument : IDocument @@ -166,7 +169,7 @@ namespace MongoDbGenericRepository /// The document type. /// The type of the primary key. /// A LINQ expression filter. - /// A property selector to order by descending. + /// A property selector to order by descending. /// An optional partitionKey. TDocument GetByMax(Expression> filter, Expression> orderByDescending, string partitionKey = null) where TDocument : IDocument @@ -201,10 +204,11 @@ namespace MongoDbGenericRepository /// /// The document type. /// The type of the primary key. + /// The type of the value used to order the query. /// A LINQ expression filter. /// A property selector to order by ascending. /// An optional partitionKey. - Task GetMaxValueAsync(Expression> filter, Expression> maxValueSelector, string partitionKey = null) + Task GetMaxValueAsync(Expression> filter, Expression> orderByAscending, string partitionKey = null) where TDocument : IDocument where TKey : IEquatable; @@ -213,8 +217,9 @@ namespace MongoDbGenericRepository /// /// The document type. /// The type of the primary key. + /// The type of the value used to order the query. /// A LINQ expression filter. - /// A property selector to order by ascending. + /// A property selector to order by ascending. /// An optional partitionKey. TValue GetMaxValue(Expression> filter, Expression> orderByDescending, string partitionKey = null) where TDocument : IDocument @@ -254,6 +259,7 @@ namespace MongoDbGenericRepository /// Sums the values of a selected field for a given filtered collection of documents. /// /// The type representing a Document. + /// The type of the primary key. /// A LINQ expression filter. /// The field you want to sum. /// The partition key of your document, if any. @@ -267,6 +273,7 @@ namespace MongoDbGenericRepository /// Sums the values of a selected field for a given filtered collection of documents. /// /// The type representing a Document. + /// The type of the primary key. /// A LINQ expression filter. /// The field you want to sum. /// The partition key of your document, if any. @@ -280,6 +287,7 @@ namespace MongoDbGenericRepository /// Sums the values of a selected field for a given filtered collection of documents. /// /// The type representing a Document. + /// The type of the primary key. /// A LINQ expression filter. /// The field you want to sum. /// The partition key of your document, if any. @@ -293,6 +301,7 @@ namespace MongoDbGenericRepository /// Sums the values of a selected field for a given filtered collection of documents. /// /// The type representing a Document. + /// The type of the primary key. /// A LINQ expression filter. /// The field you want to sum. /// The partition key of your document, if any. @@ -373,9 +382,9 @@ namespace MongoDbGenericRepository /// The type representing a Document. /// The type of the grouping criteria. /// The type of the projected group. - /// A LINQ expression filter. - /// The grouping criteria. - /// The projected group result. + /// The type of the primary key. + /// The grouping criteria. + /// The projected group result. /// The partition key of your document, if any. List GroupBy( Expression> groupingCriteria, @@ -392,6 +401,7 @@ namespace MongoDbGenericRepository /// The type representing a Document. /// The type of the grouping criteria. /// The type of the projected group. + /// The type of the primary key. /// A LINQ expression filter. /// The grouping criteria. /// The projected group result. diff --git a/MongoDbGenericRepository/KeyTypedRepository/BaseMongoRepository.TKey.Create.cs b/MongoDbGenericRepository/KeyTypedRepository/BaseMongoRepository.TKey.Create.cs index 216f47f..39e8865 100644 --- a/MongoDbGenericRepository/KeyTypedRepository/BaseMongoRepository.TKey.Create.cs +++ b/MongoDbGenericRepository/KeyTypedRepository/BaseMongoRepository.TKey.Create.cs @@ -6,6 +6,10 @@ using System.Threading.Tasks; namespace MongoDbGenericRepository { + /// + /// The interface exposing data insertion functionality for Key typed repositories. + /// + /// public interface IBaseMongoRepository_Create where TKey : IEquatable { /// @@ -45,10 +49,13 @@ namespace MongoDbGenericRepository /// The base Repository, it is meant to be inherited from by your custom custom MongoRepository implementation. /// Its constructor must be given a connection string and a database name. /// - /// public abstract partial class BaseMongoRepository : IBaseMongoRepository_Create where TKey : IEquatable { - protected MongoDbCreator _mongoDbCreator; + private MongoDbCreator _mongoDbCreator; + + /// + /// The MongoDb accessor to insert data. + /// protected MongoDbCreator MongoDbCreator { get diff --git a/MongoDbGenericRepository/KeyTypedRepository/BaseMongoRepository.TKey.Delete.cs b/MongoDbGenericRepository/KeyTypedRepository/BaseMongoRepository.TKey.Delete.cs index d6d3097..f5a7b9f 100644 --- a/MongoDbGenericRepository/KeyTypedRepository/BaseMongoRepository.TKey.Delete.cs +++ b/MongoDbGenericRepository/KeyTypedRepository/BaseMongoRepository.TKey.Delete.cs @@ -7,13 +7,16 @@ using System.Threading.Tasks; namespace MongoDbGenericRepository { + /// + /// The interface exposing deletion functionality for Key typed repositories. + /// + /// The type of the document Id. public interface IBaseMongoRepository_Delete where TKey : IEquatable { /// /// Deletes a document. /// /// The type representing a Document. - /// The type of the primary key for a Document. /// The document you want to delete. /// The number of documents deleted. long DeleteOne(TDocument document) @@ -23,7 +26,6 @@ namespace MongoDbGenericRepository /// Asynchronously deletes a document matching the condition of the LINQ expression filter. /// /// The type representing a Document. - /// The type of the primary key for a Document. /// The document you want to delete. /// The number of documents deleted. Task DeleteOneAsync(TDocument document) @@ -33,7 +35,6 @@ namespace MongoDbGenericRepository /// Deletes a document matching the condition of the LINQ expression filter. /// /// The type representing a Document. - /// The type of the primary key for a Document. /// A LINQ expression filter. /// An optional partition key. /// The number of documents deleted. @@ -44,7 +45,6 @@ namespace MongoDbGenericRepository /// Asynchronously deletes a document matching the condition of the LINQ expression filter. /// /// The type representing a Document. - /// The type of the primary key for a Document. /// A LINQ expression filter. /// An optional partition key. /// The number of documents deleted. @@ -55,7 +55,6 @@ namespace MongoDbGenericRepository /// Asynchronously deletes the documents matching the condition of the LINQ expression filter. /// /// The type representing a Document. - /// The type of the primary key for a Document. /// A LINQ expression filter. /// An optional partition key. /// The number of documents deleted. @@ -66,7 +65,6 @@ namespace MongoDbGenericRepository /// Asynchronously deletes a list of documents. /// /// The type representing a Document. - /// The type of the primary key for a Document. /// The list of documents to delete. /// The number of documents deleted. Task DeleteManyAsync(IEnumerable documents) @@ -76,7 +74,6 @@ namespace MongoDbGenericRepository /// Deletes a list of documents. /// /// The type representing a Document. - /// The type of the primary key for a Document. /// The list of documents to delete. /// The number of documents deleted. long DeleteMany(IEnumerable documents) @@ -86,7 +83,6 @@ namespace MongoDbGenericRepository /// Deletes the documents matching the condition of the LINQ expression filter. /// /// The type representing a Document. - /// The type of the primary key for a Document. /// A LINQ expression filter. /// An optional partition key. /// The number of documents deleted. @@ -98,6 +94,10 @@ namespace MongoDbGenericRepository where TKey : IEquatable { private MongoDbEraser _mongoDbEraser; + + /// + /// The MongoDb accessor to delete data. + /// protected MongoDbEraser MongoDbEraser { get @@ -119,7 +119,6 @@ namespace MongoDbGenericRepository /// Deletes a document. /// /// The type representing a Document. - /// The type of the primary key for a Document. /// The document you want to delete. /// The number of documents deleted. public virtual long DeleteOne(TDocument document) @@ -132,7 +131,6 @@ namespace MongoDbGenericRepository /// Asynchronously deletes a document matching the condition of the LINQ expression filter. /// /// The type representing a Document. - /// The type of the primary key for a Document. /// The document you want to delete. /// The number of documents deleted. public virtual async Task DeleteOneAsync(TDocument document) @@ -145,7 +143,6 @@ namespace MongoDbGenericRepository /// Deletes a document matching the condition of the LINQ expression filter. /// /// The type representing a Document. - /// The type of the primary key for a Document. /// A LINQ expression filter. /// An optional partition key. /// The number of documents deleted. @@ -159,7 +156,6 @@ namespace MongoDbGenericRepository /// Asynchronously deletes a document matching the condition of the LINQ expression filter. /// /// The type representing a Document. - /// The type of the primary key for a Document. /// A LINQ expression filter. /// An optional partition key. /// The number of documents deleted. @@ -173,7 +169,6 @@ namespace MongoDbGenericRepository /// Asynchronously deletes the documents matching the condition of the LINQ expression filter. /// /// The type representing a Document. - /// The type of the primary key for a Document. /// A LINQ expression filter. /// An optional partition key. /// The number of documents deleted. @@ -187,7 +182,6 @@ namespace MongoDbGenericRepository /// Asynchronously deletes a list of documents. /// /// The type representing a Document. - /// The type of the primary key for a Document. /// The list of documents to delete. /// The number of documents deleted. public virtual async Task DeleteManyAsync(IEnumerable documents) @@ -200,7 +194,6 @@ namespace MongoDbGenericRepository /// Deletes a list of documents. /// /// The type representing a Document. - /// The type of the primary key for a Document. /// The list of documents to delete. /// The number of documents deleted. public virtual long DeleteMany(IEnumerable documents) @@ -213,7 +206,6 @@ namespace MongoDbGenericRepository /// Deletes the documents matching the condition of the LINQ expression filter. /// /// The type representing a Document. - /// The type of the primary key for a Document. /// A LINQ expression filter. /// An optional partition key. /// The number of documents deleted. diff --git a/MongoDbGenericRepository/KeyTypedRepository/BaseMongoRepository.TKey.Index.cs b/MongoDbGenericRepository/KeyTypedRepository/BaseMongoRepository.TKey.Index.cs index 1807ab2..092c90d 100644 --- a/MongoDbGenericRepository/KeyTypedRepository/BaseMongoRepository.TKey.Index.cs +++ b/MongoDbGenericRepository/KeyTypedRepository/BaseMongoRepository.TKey.Index.cs @@ -7,6 +7,10 @@ using System.Threading.Tasks; namespace MongoDbGenericRepository { + /// + /// The interface exposing index management functionality for Key typed repositories. + /// + /// public interface IBaseMongoRepository_Index where TKey : IEquatable { /// @@ -97,11 +101,14 @@ namespace MongoDbGenericRepository /// The base Repository, it is meant to be inherited from by your custom custom MongoRepository implementation. /// Its constructor must be given a connection string and a database name. /// - /// public abstract partial class BaseMongoRepository : IBaseMongoRepository_Index where TKey : IEquatable { private MongoDbIndexHandler _mongoDbIndexHandler; + + /// + /// The MongoDb accessor to manage indexes. + /// protected MongoDbIndexHandler MongoDbIndexHandler { get diff --git a/MongoDbGenericRepository/KeyTypedRepository/BaseMongoRepository.TKey.Main.cs b/MongoDbGenericRepository/KeyTypedRepository/BaseMongoRepository.TKey.Main.cs index ef79b46..ed47b0a 100644 --- a/MongoDbGenericRepository/KeyTypedRepository/BaseMongoRepository.TKey.Main.cs +++ b/MongoDbGenericRepository/KeyTypedRepository/BaseMongoRepository.TKey.Main.cs @@ -4,7 +4,11 @@ using System; namespace MongoDbGenericRepository { - public interface IBaseMongoDbRepository : + /// + /// The interface exposing all the CRUD and Index functionalities for Key typed repositories. + /// + /// The type of the document Id. + public interface IBaseMongoRepository : IReadOnlyMongoRepository, IBaseMongoRepository_Create, IBaseMongoRepository_Delete, @@ -18,13 +22,14 @@ namespace MongoDbGenericRepository /// The base Repository, it is meant to be inherited from by your custom custom MongoRepository implementation. /// Its constructor must be given a connection string and a database name. /// - /// + /// The type of the document Id. public abstract partial class BaseMongoRepository : ReadOnlyMongoRepository, - IBaseMongoDbRepository + IBaseMongoRepository where TKey : IEquatable { - protected readonly object _initLock = new object(); + + private readonly object _initLock = new object(); /// /// The constructor taking a connection string and a database name. diff --git a/MongoDbGenericRepository/MongoDbGenericRepository.nuspec b/MongoDbGenericRepository/MongoDbGenericRepository.nuspec index 6610a28..c82497c 100644 --- a/MongoDbGenericRepository/MongoDbGenericRepository.nuspec +++ b/MongoDbGenericRepository/MongoDbGenericRepository.nuspec @@ -2,7 +2,7 @@ MongoDbGenericRepository - 1.3.8 + 1.3.9 MongoDb Generic Repository Alexandre Spieser Alexandre Spieser @@ -11,7 +11,7 @@ false A generic repository implementation using the MongoDB C# Sharp 2.0 driver. Release notes are at https://github.com/alexandre-spieser/mongodb-generic-repository/releases - Copyright 2018 (c) Alexandre Spieser. All rights reserved. + Copyright 2019 (c) Alexandre Spieser. All rights reserved. MongoDb Repository Generic NoSql diff --git a/MongoDbGenericRepository/ReadOnlyMongoRepository.cs b/MongoDbGenericRepository/ReadOnlyMongoRepository.cs index 2a3f9ba..e9ed276 100644 --- a/MongoDbGenericRepository/ReadOnlyMongoRepository.cs +++ b/MongoDbGenericRepository/ReadOnlyMongoRepository.cs @@ -261,8 +261,9 @@ namespace MongoDbGenericRepository /// /// The document type. /// The type of the primary key. + /// The type of the value used to order the query. /// A LINQ expression filter. - /// A property selector to order by ascending. + /// A property selector to select the max value. /// An optional partitionKey. public async virtual Task GetMaxValueAsync(Expression> filter, Expression> maxValueSelector, string partitionKey = null) where TDocument : IDocument @@ -327,6 +328,7 @@ namespace MongoDbGenericRepository /// Sums the values of a selected field for a given filtered collection of documents. /// /// The type representing a Document. + /// The type of the primary key. /// A LINQ expression filter. /// The field you want to sum. /// The partition key of your document, if any. @@ -343,6 +345,7 @@ namespace MongoDbGenericRepository /// Sums the values of a selected field for a given filtered collection of documents. /// /// The type representing a Document. + /// The type of the primary key. /// A LINQ expression filter. /// The field you want to sum. /// The partition key of your document, if any. @@ -359,6 +362,7 @@ namespace MongoDbGenericRepository /// Sums the values of a selected field for a given filtered collection of documents. /// /// The type representing a Document. + /// The type of the primary key. /// A LINQ expression filter. /// The field you want to sum. /// The partition key of your document, if any. @@ -375,6 +379,7 @@ namespace MongoDbGenericRepository /// Sums the values of a selected field for a given filtered collection of documents. /// /// The type representing a Document. + /// The type of the primary key. /// A LINQ expression filter. /// The field you want to sum. /// The partition key of your document, if any. @@ -468,11 +473,11 @@ namespace MongoDbGenericRepository /// and returns a dictionary of listed document groups with keys having the different values of the grouping criteria. /// /// The type representing a Document. + /// The type of the primary key for a Document. /// The type of the grouping criteria. /// The type of the projected group. - /// A LINQ expression filter. - /// The grouping criteria. - /// The projected group result. + /// The grouping criteria. + /// The projected group result. /// The partition key of your document, if any. public virtual List GroupBy( Expression> groupingCriteria, @@ -490,6 +495,7 @@ namespace MongoDbGenericRepository /// and returns a dictionary of listed document groups with keys having the different values of the grouping criteria. /// /// The type representing a Document. + /// The type of the primary key for a Document. /// The type of the grouping criteria. /// The type of the projected group. /// A LINQ expression filter. @@ -613,7 +619,6 @@ namespace MongoDbGenericRepository /// Gets a collections for a potentially partitioned document type. /// /// The document type. - /// The type of the primary key. /// The document. /// public virtual IMongoCollection HandlePartitioned(TDocument document) diff --git a/MongoDbGenericRepository/lib/net45/MongoDbGenericRepository.dll b/MongoDbGenericRepository/lib/net45/MongoDbGenericRepository.dll index 901f74a86f07ff729075d310226c575d8c8e48a3..93c1b65543cf0fbc733b7096261e466825629408 100644 GIT binary patch literal 154112 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 a?-V_7ZP?62mYpu(o?`a@75|^@f&UM~qoDBs literal 99328 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 diff --git a/MongoDbGenericRepository/lib/net45/MongoDbGenericRepository.xml b/MongoDbGenericRepository/lib/net45/MongoDbGenericRepository.xml index aa5ec45..817687c 100644 --- a/MongoDbGenericRepository/lib/net45/MongoDbGenericRepository.xml +++ b/MongoDbGenericRepository/lib/net45/MongoDbGenericRepository.xml @@ -6,502 +6,9 @@ - The IBaseMongoRepository exposes the CRUD functionality of the BaseMongoRepository. + The IBaseMongoRepository interface exposes the CRUD functionality of the BaseMongoRepository. - - - Asynchronously adds a document to the collection. - - The type representing a Document. - The document you want to add. - - - - Adds a document to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The document you want to add. - - - - Asynchronously adds a list of documents to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The document you want to add. - - - - Adds a list of documents to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The document you want to add. - - - - Asynchronously adds a document to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to add. - - - - Adds a document to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to add. - - - - Asynchronously adds a list of documents to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The type of the primary key for a Document. - The documents you want to add. - - - - Adds a list of documents to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The type of the primary key for a Document. - The documents you want to add. - - - - Asynchronously Updates a document. - - The type representing a Document. - The document with the modifications you want to persist. - - - - Updates a document. - - The type representing a Document. - The document with the modifications you want to persist. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - For the entity selected by the filter, updates the property field with the given value. - - The type representing a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The partition key for the document. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The document you want to modify. - The update definition for the document. - - - - For the entity selected by the filter, updates the property field with the given value. - - The type representing a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The partition key for the document. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The document you want to modify. - The update definition for the document. - - - - Asynchronously Updates a document. - - The type representing a Document. - The type of the primary key for a Document. - The document with the modifications you want to persist. - - - - Updates a document. - - The type representing a Document. - The type of the primary key for a Document. - The document with the modifications you want to persist. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to modify. - The update definition for the document. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to modify. - The update definition for the document. - - - - For the entity selected by the filter, updates the property field with the given value.. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The partition key for the document. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - For the entity selected by the filter, updates the property field with the given value. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The partition key for the document. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - Asynchronously deletes a document. - - The type representing a Document. - The document you want to delete. - The number of documents deleted. - - - - Asynchronously deletes a document matching the condition of the LINQ expression filter. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Deletes a document. - - The type representing a Document. - The document you want to delete. - The number of documents deleted. - - - - Deletes a document matching the condition of the LINQ expression filter. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously deletes the documents matching the condition of the LINQ expression filter. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously deletes a list of documents. - - The type representing a Document. - The list of documents to delete. - The number of documents deleted. - - - - Deletes a list of documents. - - The type representing a Document. - The list of documents to delete. - The number of documents deleted. - - - - Deletes the documents matching the condition of the LINQ expression filter. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Deletes a document. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to delete. - The number of documents deleted. - - - - Asynchronously deletes a document matching the condition of the LINQ expression filter. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to delete. - The number of documents deleted. - - - - Deletes a document matching the condition of the LINQ expression filter. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously deletes a document matching the condition of the LINQ expression filter. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously deletes the documents matching the condition of the LINQ expression filter. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously deletes a list of documents. - - The type representing a Document. - The type of the primary key for a Document. - The list of documents to delete. - The number of documents deleted. - - - - Deletes a list of documents. - - The type representing a Document. - The type of the primary key for a Document. - The list of documents to delete. - The number of documents deleted. - - - - Deletes the documents matching the condition of the LINQ expression filter. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously returns a projected document matching the filter condition. - - The type representing a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Asynchronously returns a projected document matching the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Returns a projected document matching the filter condition. - - The type representing a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Returns a projected document matching the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Asynchronously returns a list of projected documents matching the filter condition. - - The type representing a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Asynchronously returns a list of projected documents matching the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Asynchronously returns a list of projected documents matching the filter condition. - - The type representing a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Asynchronously returns a list of projected documents matching the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - Asynchronously returns a paginated list of the documents matching the filter condition. @@ -544,19 +51,289 @@ - + - Groups a collection of documents given a grouping criteria, - and returns a list of projected documents. + The IBaseReadOnlyRepository exposes the generic Read Only functionality of the BaseMongoRepository. + + + + + The connection string. + + + + + The database name. + + + + + Asynchronously returns one document given its id. The type representing a Document. - The type of the grouping criteria. - The type of the projected group. - The grouping criteria. - The projected group result. + The type of the primary key for a Document. + The Id of the document you want to get. + An optional partition key. + + + + Returns one document given its id. + + The type representing a Document. + The type of the primary key for a Document. + The Id of the document you want to get. + An optional partition key. + + + + Asynchronously returns one document given an expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns one document given an expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns a collection cursor. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns true if any of the document of the collection matches the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns true if any of the document of the collection matches the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Asynchronously returns a list of the documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns a list of the documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Asynchronously counts how many documents match the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partitionKey + + + + Counts how many documents match the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partitionKey + + + + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + The type of the primary key. + A LINQ expression filter. + A property selector to order by descending. + An optional partitionKey. + + + + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + The type of the primary key. + A LINQ expression filter. + A property selector to order by descending. + An optional partitionKey. + + + + Gets the document with the minimum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + The type of the primary key. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the document with the minimum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + The type of the primary key. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the maximum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the primary key. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the maximum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the primary key. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the minimum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the primary key. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partition key. + + + + Gets the minimum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the primary key. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partition key. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + The type of the primary key. + A LINQ expression filter. + The field you want to sum. The partition key of your document, if any. - + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + The type of the primary key. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + The type of the primary key. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + The type of the primary key. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Asynchronously returns a projected document matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + + The projection expression. + An optional partition key. + + + + Returns a projected document matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + + The projection expression. + An optional partition key. + + 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. @@ -564,174 +341,49 @@ The type representing a Document. The type of the grouping criteria. The type of the projected group. - - The grouping criteria. - The projected group result. + The type of the primary key. + The grouping criteria. + The projected group result. The partition key of your document, if any. - + - The repository interface for managing indexes - - - - - Create a text index on the given field. - IndexCreationOptions can be supplied to further specify - how the creation should be done. + 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. The type representing a Document. - The field we want to index. - Options for creating an index. - An optional partition key. - The result of the create index operation. + The type of the grouping criteria. + The type of the projected group. + The type of the primary key. + A LINQ expression filter. + The grouping criteria. + The projected group result. + The partition key of your document, if any. - + - Create a text index on the given field. - IndexCreationOptions can be supplied to further specify - how the creation should be done. + Asynchronously returns a paginated list of the documents matching the filter condition. The type representing a Document. The type of the primary key for a Document. - The field we want to index. - Options for creating an index. + A LINQ expression filter. + The property selector. + Order of the sorting. + The number of documents you want to skip. Default value is 0. + The number of documents you want to take. Default value is 50. An optional partition key. - The result of the create index operation. - + - Creates an index on the given field in ascending order. - IndexCreationOptions can be supplied to further specify - how the creation should be done. - - The type representing a Document. - The field we want to index. - Options for creating an index. - An optional partition key. - The result of the create index operation. - - - - Creates an index on the given field in ascending order. - IndexCreationOptions can be supplied to further specify - how the creation should be done. + Asynchronously returns a paginated list of the documents matching the filter condition. The type representing a Document. The type of the primary key for a Document. - The field we want to index. - Options for creating an index. + A LINQ expression filter. + The sort definition. + The number of documents you want to skip. Default value is 0. + The number of documents you want to take. Default value is 50. An optional partition key. - The result of the create index operation. - - - - Creates an index on the given field in descending order. - IndexCreationOptions can be supplied to further specify - how the creation should be done. - - The type representing a Document. - The field we want to index. - Options for creating an index. - An optional partition key. - A string containing the result of the operation. - - - - Creates an index on the given field in descending order. - IndexCreationOptions can be supplied to further specify - how the creation should be done. - - The type representing a Document. - The type of the primary key for a Document. - The field we want to index. - Options for creating an index. - An optional partition key. - The result of the create index operation. - - - - Creates a hashed index on the given field. - IndexCreationOptions can be supplied to further specify - how the creation should be done. - - The type representing a Document. - The field we want to index. - Options for creating an index. - An optional partition key. - A string containing the result of the operation. - - - - Creates a hashed index on the given field. - IndexCreationOptions can be supplied to further specify - how the creation should be done. - - The type representing a Document. - The type of the primary key for a Document. - The field we want to index. - Options for creating an index. - An optional partition key. - The result of the create index operation. - - - - Creates a combined text index. - IndexCreationOptions can be supplied to further specify - how the creation should be done. - - The type representing a Document. - The fields we want to index. - Options for creating an index. - An optional partition key. - The result of the create index operation. - - - - Creates a combined text index. - IndexCreationOptions can be supplied to further specify - how the creation should be done. - - The type representing a Document. - The type of the primary key for a Document. - The fields we want to index. - Options for creating an index. - An optional partition key. - The result of the create index operation. - - - - Drops the index given a field name - - The type representing a Document. - The name of the index - An optional partition key - - - - Drops the index given a field name - - The type representing a Document. - The type of the primary key for a Document. - The name of the index - An optional partition key - - - - Returns the names of the indexes present on a collection. - - The type representing a Document. - An optional partition key - A list containing the names of the indexes on on the concerned collection. - - - - Returns the names of the indexes present on a collection. - - The type representing a Document. - The type of the primary key for a Document. - An optional partition key - A list containing the names of the indexes on on the concerned collection. @@ -772,17 +424,7 @@ The IReadOnlyMongoRepository exposes the readonly functionality of the BaseMongoRepository. - - - The connection string. - - - - - The database name. - - - + Asynchronously returns one document given its id. @@ -790,7 +432,7 @@ The Id of the document you want to get. An optional partition key. - + Returns one document given its id. @@ -798,7 +440,7 @@ The Id of the document you want to get. An optional partition key. - + Asynchronously returns one document given an expression filter. @@ -806,7 +448,7 @@ A LINQ expression filter. An optional partition key. - + Returns one document given an expression filter. @@ -814,7 +456,7 @@ A LINQ expression filter. An optional partition key. - + Returns a collection cursor. @@ -822,7 +464,7 @@ A LINQ expression filter. An optional partition key. - + Asynchronously returns true if any of the document of the collection matches the filter condition. @@ -830,7 +472,7 @@ A LINQ expression filter. An optional partition key. - + Returns true if any of the document of the collection matches the filter condition. @@ -838,7 +480,7 @@ A LINQ expression filter. An optional partition key. - + Asynchronously returns a list of the documents matching the filter condition. @@ -846,7 +488,7 @@ A LINQ expression filter. An optional partition key. - + Returns a list of the documents matching the filter condition. @@ -854,7 +496,7 @@ A LINQ expression filter. An optional partition key. - + Asynchronously counts how many documents match the filter condition. @@ -862,7 +504,7 @@ A LINQ expression filter. An optional partition key. - + Counts how many documents match the filter condition. @@ -870,106 +512,7 @@ A LINQ expression filter. An optional partition key. - - - Asynchronously returns one document given its id. - - The type representing a Document. - The type of the primary key for a Document. - The Id of the document you want to get. - An optional partition key. - - - - Returns one document given its id. - - The type representing a Document. - The type of the primary key for a Document. - The Id of the document you want to get. - An optional partition key. - - - - Asynchronously returns one document given an expression filter. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - - - - Returns one document given an expression filter. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - - - - Returns a collection cursor. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - - - - Returns true if any of the document of the collection matches the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - - - - Returns true if any of the document of the collection matches the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - - - - Asynchronously returns a list of the documents matching the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - - - - Returns a list of the documents matching the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - - - - Asynchronously counts how many documents match the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partitionKey - - - - Counts how many documents match the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partitionKey - - + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. @@ -978,7 +521,7 @@ A property selector to order by descending. An optional partitionKey. - + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. @@ -988,7 +531,7 @@ An optional partitionKey. - + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. @@ -997,7 +540,7 @@ A property selector to order by ascending. An optional partitionKey. - + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. @@ -1006,47 +549,7 @@ A property selector to order by ascending. An optional partitionKey. - - - Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. - - The document type. - The type of the primary key. - A LINQ expression filter. - A property selector to order by descending. - An optional partitionKey. - - - - Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. - - The document type. - The type of the primary key. - A LINQ expression filter. - A property selector to order by descending. - An optional partitionKey. - - - - Gets the document with the minimum value of a specified property in a MongoDB collections that is satisfying the filter. - - The document type. - The type of the primary key. - A LINQ expression filter. - A property selector to order by ascending. - An optional partitionKey. - - - - Gets the document with the minimum value of a specified property in a MongoDB collections that is satisfying the filter. - - The document type. - The type of the primary key. - A LINQ expression filter. - A property selector to order by ascending. - An optional partitionKey. - - + Gets the maximum value of a property in a mongodb collections that is satisfying the filter. @@ -1056,17 +559,7 @@ A property selector to order by ascending. An optional partitionKey. - - - Gets the maximum value of a property in a mongodb collections that is satisfying the filter. - - The document type. - The type of the primary key. - A LINQ expression filter. - A property selector to order by ascending. - An optional partitionKey. - - + Gets the maximum value of a property in a mongodb collections that is satisfying the filter. @@ -1076,17 +569,7 @@ A property selector to order by ascending. An optional partitionKey. - - - Gets the maximum value of a property in a mongodb collections that is satisfying the filter. - - The document type. - The type of the primary key. - A LINQ expression filter. - A property selector to order by ascending. - An optional partitionKey. - - + Gets the minimum value of a property in a mongodb collections that is satisfying the filter. @@ -1096,18 +579,7 @@ A property selector to order by ascending. An optional partition key. - - - Gets the minimum value of a property in a mongodb collections that is satisfying the filter. - - The document type. - The type of the primary key. - The type of the value used to order the query. - A LINQ expression filter. - A property selector to order by ascending. - An optional partition key. - - + Gets the minimum value of a property in a mongodb collections that is satisfying the filter. @@ -1117,17 +589,108 @@ A property selector to order by ascending. An optional partition key. - + - Gets the minimum value of a property in a mongodb collections that is satisfying the filter. + Sums the values of a selected field for a given filtered collection of documents. - The document type. - The type of the primary key. - The type of the value used to order the query. + The type representing a Document. A LINQ expression filter. - A property selector to order by ascending. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Asynchronously returns a projected document matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. An optional partition key. + + + Returns a projected document matching the filter condition. + + The type representing a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Groups a collection of documents given a grouping criteria, + and returns a dictionary of listed document groups with keys having the different values of the grouping criteria. + + The type representing a Document. + The type of the grouping criteria. + The type of the projected group. + The grouping criteria. + The projected group result. + The partition key of your document, if any. + + + + 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. + + The type representing a Document. + The type of the grouping criteria. + The type of the projected group. + A LINQ expression filter. + The grouping criteria. + The projected group result. + The partition key of your document, if any. + This attribute allows you to specify of the name of the collection. @@ -1148,6 +711,42 @@ The name of the collection. + + + Asynchronously adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to add. + + + + Adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to add. + + + + Asynchronously adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The documents you want to add. + + + + Adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The documents you want to add. + The base Repository, it is meant to be inherited from by your custom custom MongoRepository implementation. @@ -1157,57 +756,14 @@ 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. - - - The constructor taking a connection string and a database name. + 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. - The connection string of the MongoDb server. - The name of the database against which you want to perform operations. - - - The contructor taking a . + 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. - A mongodb context implementing - - - - The contructor taking a . - - A mongodb context implementing - - - - Asynchronously adds a document to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The document you want to add. - - - - Adds a document to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The document you want to add. - - - - Asynchronously adds a list of documents to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The documents you want to add. - - - - Adds a list of documents to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The documents you want to add. @@ -1218,6 +774,14 @@ The type of the primary key for a Document. The document you want to add. + + + Asynchronously adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The document you want to add. + Adds a document to the collection. @@ -1227,6 +791,14 @@ The type of the primary key for a Document. The document you want to add. + + + Adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The document you want to add. + Asynchronously adds a list of documents to the collection. @@ -1236,6 +808,14 @@ The type of the primary key for a Document. The documents you want to add. + + + Asynchronously adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The documents you want to add. + Adds a list of documents to the collection. @@ -1245,203 +825,13 @@ The type of the primary key for a Document. The documents you want to add. - + - Asynchronously Updates a document. + Adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. The type representing a Document. - The document with the modifications you want to persist. - - - - Updates a document. - - The type representing a Document. - The document with the modifications you want to persist. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The document you want to modify. - The update definition for the document. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - For the entity selected by the filter, updates the property field with the given value. - - The type representing a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The partition key for the document. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - For the entity selected by the filter, updates the property field with the given value. - - The type representing a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The partition key for the document. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The document you want to modify. - The update definition for the document. - - - - Asynchronously Updates a document. - - The type representing a Document. - The type of the primary key for a Document. - The document with the modifications you want to persist. - - - - Updates a document. - - The type representing a Document. - The type of the primary key for a Document. - The document with the modifications you want to persist. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to modify. - The update definition for the document. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to modify. - The update definition for the document. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - For the entity selected by the filter, updates the property field with the given value. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The partition key for the document. - - - - Updates the property field with the given value. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - For the entity selected by the filter, updates the property field with the given value. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The partition key for the document. + The documents you want to add. @@ -1587,121 +977,154 @@ An optional partition key. The number of documents deleted. - + - Asynchronously returns a projected document matching the filter condition. - - The type representing a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Asynchronously returns a projected document matching the filter condition. + Returns the names of the indexes present on a collection. The type representing a Document. The type of the primary key for a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. + An optional partition key + A list containing the names of the indexes on on the concerned collection. - + - Returns a projected document matching the filter condition. + Returns the names of the indexes present on a collection. The type representing a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. + An optional partition key + A list containing the names of the indexes on on the concerned collection. - + - Returns a projected document matching the filter condition. + Create a text index on the given field. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Create a text index on the given field. + IndexCreationOptions can be supplied to further specify + how the creation should be done. The type representing a Document. The type of the primary key for a Document. - The type representing the model you want to project to. - - The projection expression. + The field we want to index. + Options for creating an index. An optional partition key. + The result of the create index operation. - + - Asynchronously returns a list of projected documents matching the filter condition. + Creates an index on the given field in ascending order. + IndexCreationOptions can be supplied to further specify + how the creation should be done. The type representing a Document. - The type representing the model you want to project to. - - The projection expression. + The field we want to index. + Options for creating an index. An optional partition key. + The result of the create index operation. - + - Asynchronously returns a list of projected documents matching the filter condition. + Creates an index on the given field in ascending order. + IndexCreationOptions can be supplied to further specify + how the creation should be done. The type representing a Document. The type of the primary key for a Document. - The type representing the model you want to project to. - - The projection expression. + The field we want to index. + Options for creating an index. An optional partition key. + The result of the create index operation. - + - Asynchronously returns a list of projected documents matching the filter condition. + Creates an index on the given field in descending order. + IndexCreationOptions can be supplied to further specify + how the creation should be done. The type representing a Document. - The type representing the model you want to project to. - - The projection expression. + The field we want to index. + Options for creating an index. An optional partition key. + The result of the create index operation. - + + + + - Asynchronously returns a list of projected documents matching the filter condition. + Creates a hashed index on the given field. + IndexCreationOptions can be supplied to further specify + how the creation should be done. The type representing a Document. - The type of the primary key for a Document. - The type representing the model you want to project to. - The document filter. - The projection expression. + The field we want to index. + Options for creating an index. An optional partition key. + The result of the create index operation. - + + + + - Groups a collection of documents given a grouping criteria, - and returns a dictionary of listed document groups with keys having the different values of the grouping criteria. + Creates a combined text index. + IndexCreationOptions can be supplied to further specify + how the creation should be done. The type representing a Document. - The type of the grouping criteria. - The type of the projected group. - The grouping criteria. - The projected group result. - The partition key of your document, if any. + The fields we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. - + + + + - 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. + Drops the index given a field name The type representing a Document. - The type of the grouping criteria. - The type of the projected group. - - The grouping criteria. - The projected group result. - The partition key of your document, if any. + The name of the index + An optional partition key + + + + + + + The constructor taking a connection string and a database name. + + The connection string of the MongoDb server. + The name of the database against which you want to perform operations. + + + + The contructor taking a . + + A mongodb context implementing + + + + The contructor taking a . + + A mongodb context implementing Asynchronously returns a paginated list of the documents matching the filter condition. The type representing a Document. - + A LINQ expression filter. The number of documents you want to skip. Default value is 0. The number of documents you want to take. Default value is 50. An optional partition key. @@ -1712,7 +1135,7 @@ The type representing a Document. The type of the primary key for a Document. - + A LINQ expression filter. The number of documents you want to skip. Default value is 0. The number of documents you want to take. Default value is 50. An optional partition key. @@ -1722,7 +1145,7 @@ GetAndUpdateOne with filter The type representing a Document. - + A LINQ expression filter. @@ -1733,7 +1156,7 @@ The type representing a Document. The type of the primary key for a Document. - + A LINQ expression filter. @@ -1753,47 +1176,2135 @@ The document type. The document. - - + + + Gets a collections for a potentially partitioned document type. + + The document type. + The collection partition key. + - - + + + Gets a collections for the type TDocument with a partition key. + + The document type. + The collection partition key. + - - + + + Asynchronously Updates a document. + + The type representing a Document. + The document with the modifications you want to persist. - - + + + Updates a document. + + The type representing a Document. + The document with the modifications you want to persist. - - + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The document you want to modify. + The update definition for the document. - - + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The document you want to modify. + The update definition for the document. - - + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. - - + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. - - + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. - - + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. - - + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. - - + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. - - + + + Asynchronously Updates a document. + + The type representing a Document. + The type of the primary key for a Document. + The document with the modifications you want to persist. - - + + + Updates a document. + + The type representing a Document. + The type of the primary key for a Document. + The document with the modifications you want to persist. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to modify. + The update definition for the document. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to modify. + The update definition for the document. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. + + + + Deletes a document. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to delete. + The number of documents deleted. + + + + Asynchronously deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to delete. + The number of documents deleted. + + + + Deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a list of documents. + + The type representing a Document. + The type of the primary key for a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes a list of documents. + + The type representing a Document. + The type of the primary key for a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Returns the names of the indexes present on a collection. + + The type representing a Document. + The type of the primary key for a Document. + An optional partition key + A list containing the names of the indexes on on the concerned collection. + + + + Create a text index on the given field. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The type of the primary key for a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates an index on the given field in ascending order. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The type of the primary key for a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates an index on the given field in descending order. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The type of the primary key for a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates a hashed index on the given field. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The type of the primary key for a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates a combined text index. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The type of the primary key for a Document. + The fields we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Drops the index given a field name + + The type representing a Document. + The type of the primary key for a Document. + The name of the index + An optional partition key + + + + Asynchronously Updates a document. + + The type representing a Document. + The type of the primary key for a Document. + The document with the modifications you want to persist. + + + + Updates a document. + + The type representing a Document. + The type of the primary key for a Document. + The document with the modifications you want to persist. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to modify. + The update definition for the document. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to modify. + The update definition for the document. + + + + For the entity selected by the filter, updates the property field with the given value.. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + Gets a collections for a potentially partitioned document type. + + The document type. + The type of the primary key. + The document. + + + + + Gets a collections for the type TDocument with a partition key. + + The document type. + The type of the primary key. + The collection partition key. + + + + + Gets a collections for a potentially partitioned document type. + + The document type. + The type of the primary key. + The collection partition key. + + + + + Converts a LINQ expression of TDocument, TValue to a LINQ expression of TDocument, object + + The document type. + The type of the value. + The expression to convert + + + + Maps a IndexCreationOptions object to a MongoDB.Driver.CreateIndexOptions object + + The options for creating an index. + + + + + Gets the minimum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the primary key. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partition key. + + + + Gets the minimum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the primary key. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by descending. + An optional partition key. + + + + Asynchronously adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to add. + + + + Adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to add. + + + + Asynchronously adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The documents you want to add. + + + + Adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The documents you want to add. + + + + Sets the value of the document Id if it is not set already. + + The document type. + The type of the primary key. + The document. + + + + Deletes a document. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to delete. + The number of documents deleted. + + + + Asynchronously deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to delete. + The number of documents deleted. + + + + Deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a list of documents. + + The type representing a Document. + The type of the primary key for a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes a list of documents. + + The type representing a Document. + The type of the primary key for a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Returns the names of the indexes present on a collection. + + The type representing a Document. + The type of the primary key for a Document. + An optional partition key + A list containing the names of the indexes on on the concerned collection. + + + + Create a text index on the given field. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The type of the primary key for a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates an index on the given field in ascending order. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The type of the primary key for a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates an index on the given field in descending order. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The type of the primary key for a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates a hashed index on the given field. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The type of the primary key for a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates a combined text index. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The type of the primary key for a Document. + The fields we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Drops the index given a field name + + The type representing a Document. + The type of the primary key for a Document. + The name of the index + An optional partition key + + + + Asynchronously returns one document given its id. + + The type representing a Document. + The type of the primary key for a Document. + The Id of the document you want to get. + An optional partition key. + + + + Returns one document given its id. + + The type representing a Document. + The type of the primary key for a Document. + The Id of the document you want to get. + An optional partition key. + + + + Asynchronously returns one document given an expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns one document given an expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns a collection cursor. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns true if any of the document of the collection matches the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns true if any of the document of the collection matches the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Asynchronously returns a list of the documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns a list of the documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Asynchronously counts how many documents match the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partitionKey + + + + Counts how many documents match the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partitionKey + + + + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + The type of the primary key. + A LINQ expression filter. + A property selector to order by descending. + An optional partitionKey. + + + + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + The type of the primary key. + A LINQ expression filter. + A property selector to order by descending. + An optional partitionKey. + + + + Gets the document with the minimum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + The type of the primary key. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the document with the minimum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + The type of the primary key. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the maximum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the primary key. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the maximum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the primary key. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the minimum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the primary key. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partition key. + + + + Gets the minimum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the primary key. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partition key. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Groups a collection of documents given a grouping criteria, + and returns a dictionary of listed document groups with keys having the different values of the grouping criteria. + + The type representing a Document. + The type of the primary key for a Document. + The type of the grouping criteria. + The type of the projected group. + The grouping criteria. + The projected group result. + The partition key of your document, if any. + + + + 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. + + The type representing a Document. + The type of the primary key for a Document. + The type of the grouping criteria. + The type of the projected group. + A LINQ expression filter. + The grouping criteria. + The projected group result. + The partition key of your document, if any. + + + + Asynchronously returns a paginated list of the documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + The property selector. + Order of the sorting. + The number of documents you want to skip. Default value is 0. + The number of documents you want to take. Default value is 50. + An optional partition key. + + + + Asynchronously returns a paginated list of the documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + The sort definition. + The number of documents you want to skip. Default value is 0. + The number of documents you want to take. Default value is 50. + An optional partition key. + + + + Asynchronously returns a projected document matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Returns a projected document matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + The document filter. + The projection expression. + An optional partition key. + + + + Asynchronously Updates a document. + + The type representing a Document. + The type of the primary key for a Document. + The document with the modifications you want to persist. + + + + Updates a document. + + The type representing a Document. + The type of the primary key for a Document. + The document with the modifications you want to persist. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to modify. + The update definition for the document. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to modify. + The update definition for the document. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. + + + + Updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. + + + + The interface exposing data insertion functionality for Key typed repositories. + + + + + + Asynchronously adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The document you want to add. + + + + Adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The document you want to add. + + + + Asynchronously adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The documents you want to add. + + + + Adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The documents you want to add. + + + + 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. + + + 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. + + + 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. + + The type of the document Id. + + + + The MongoDb accessor to insert data. + + + + + Asynchronously adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The document you want to add. + + + + Adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The document you want to add. + + + + Asynchronously adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The documents you want to add. + + + + Adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The documents you want to add. + + + + The MongoDb accessor to delete data. + + + + + Deletes a document. + + The type representing a Document. + The document you want to delete. + The number of documents deleted. + + + + Asynchronously deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + The document you want to delete. + The number of documents deleted. + + + + Deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a list of documents. + + The type representing a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes a list of documents. + + The type representing a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + The MongoDb accessor to manage indexes. + + + + + Returns the names of the indexes present on a collection. + + The type representing a Document. + An optional partition key + A list containing the names of the indexes on on the concerned collection. + + + + Create a text index on the given field. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates an index on the given field in ascending order. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates an index on the given field in descending order. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates a hashed index on the given field. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates a combined text index. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The fields we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Drops the index given a field name + + The type representing a Document. + The name of the index + An optional partition key + + + + The constructor taking a connection string and a database name. + + The connection string of the MongoDb server. + The name of the database against which you want to perform operations. + + + + The contructor taking a . + + A mongodb context implementing + + + + The contructor taking a . + + A mongodb context implementing + + + + Gets a collections for a potentially partitioned document type. + + The document type. + The collection partition key. + + + + + Gets a collections for the type TDocument with a partition key. + + The document type. + The collection partition key. + + + + + Asynchronously Updates a document. + + The type representing a Document. + The document with the modifications you want to persist. + + + + Updates a document. + + The type representing a Document. + The document with the modifications you want to persist. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The document you want to modify. + The update definition for the document. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The document you want to modify. + The update definition for the document. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. + + + + The interface exposing deletion functionality for Key typed repositories. + + The type of the document Id. + + + + Deletes a document. + + The type representing a Document. + The document you want to delete. + The number of documents deleted. + + + + Asynchronously deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + The document you want to delete. + The number of documents deleted. + + + + Deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a list of documents. + + The type representing a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes a list of documents. + + The type representing a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + The interface exposing index management functionality for Key typed repositories. + + + + + + Returns the names of the indexes present on a collection. + + The type representing a Document. + An optional partition key + A list containing the names of the indexes on on the concerned collection. + + + + Create a text index on the given field. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates an index on the given field in ascending order. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates an index on the given field in descending order. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates a hashed index on the given field. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates a combined text index. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The fields we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Drops the index given a field name + + The type representing a Document. + The name of the index + An optional partition key + + + + The interface exposing all the CRUD and Index functionalities for Key typed repositories. + + The type of the document Id. + + + + 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. + + + + + The connection string. + + + + + The database name. + + + + + The MongoDbContext + + + + + A MongoDb Reader for read operations + + + + + The constructor taking a connection string and a database name. + + The connection string of the MongoDb server. + The name of the database against which you want to perform operations. + + + + The contructor taking a . + + A mongodb context implementing + + + + The contructor taking a . + + A mongodb context implementing + + + + Asynchronously returns one document given its id. + + The type representing a Document. + The Id of the document you want to get. + An optional partition key. + + + + Returns one document given its id. + + The type representing a Document. + The Id of the document you want to get. + An optional partition key. + + + + Asynchronously returns one document given an expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns one document given an expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns a collection cursor. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns true if any of the document of the collection matches the filter condition. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns true if any of the document of the collection matches the filter condition. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + + + + Asynchronously returns a list of the documents matching the filter condition. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns a list of the documents matching the filter condition. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + + + + Asynchronously counts how many documents match the filter condition. + + The type representing a Document. + A LINQ expression filter. + An optional partitionKey + + + + Counts how many documents match the filter condition. + + The type representing a Document. + A LINQ expression filter. + An optional partitionKey + + + + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + A LINQ expression filter. + A property selector to order by descending. + An optional partitionKey. + + + + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + A LINQ expression filter. + A property selector to order by descending. + An optional partitionKey. + + + + + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the maximum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the maximum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the minimum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partition key. + + + + Gets the minimum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partition key. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Asynchronously returns a projected document matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Returns a projected document matching the filter condition. + + The type representing a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Groups a collection of documents given a grouping criteria, + and returns a dictionary of listed document groups with keys having the different values of the grouping criteria. + + The type representing a Document. + The type of the grouping criteria. + The type of the projected group. + The grouping criteria. + The projected group result. + The partition key of your document, if any. + + + + 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. + + The type representing a Document. + The type of the grouping criteria. + The type of the projected group. + A LINQ expression filter. + The grouping criteria. + The projected group result. + The partition key of your document, if any. + + + + Asynchronously returns a paginated list of the documents matching the filter condition. + + The type representing a Document. + A LINQ expression filter. + The property selector. + Order of the sorting. + The number of documents you want to skip. Default value is 0. + The number of documents you want to take. Default value is 50. + An optional partition key. + + + + Asynchronously returns a paginated list of the documents matching the filter condition. + + The type representing a Document. + A LINQ expression filter. + The sort definition. + The number of documents you want to skip. Default value is 0. + The number of documents you want to take. Default value is 50. + An optional partition key. + + + + Asynchronously Updates a document. + + The type representing a Document. + The document with the modifications you want to persist. + + + + Updates a document. + + The type representing a Document. + The document with the modifications you want to persist. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The document you want to modify. + The update definition for the document. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The document you want to modify. + The update definition for the document. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. @@ -1960,29 +3471,17 @@ - The IMongoClient from the official MongoDb driver + The IMongoClient from the official MongoDB driver - The IMongoDatabase from the official Mongodb driver - - - - - Sets the Guid representation of the MongoDb Driver. - - The new value of the GuidRepresentation - - - - Initialize the Guid representation of the MongoDb Driver. - Override this method to change the default GuidRepresentation. + The IMongoDatabase from the official MongoDB driver - The constructor of the MongoDbContext, it needs a an object implementing . + The constructor of the MongoDbContext, it needs an object implementing . An object implementing IMongoDatabase @@ -1993,12 +3492,12 @@ The connections string. The name of your database. - + - Extracts the CollectionName attribute from the entity type, if any. + The constructor of the MongoDbContext, it needs a connection string and a database name. - The type representing a Document. - The name of the collection in which the TDocument is stored. + The MongoClient. + The name of your database. @@ -2013,9 +3512,28 @@ The type representing a Document. + + + Sets the Guid representation of the MongoDB Driver. + + The new value of the GuidRepresentation + + + + Extracts the CollectionName attribute from the entity type, if any. + + The type representing a Document. + The name of the collection in which the TDocument is stored. + + + + Initialize the Guid representation of the MongoDB Driver. + Override this method to change the default GuidRepresentation. + + - Given the docmuent type and the partition key, returns the name of the collection it belongs to. + Given the document type and the partition key, returns the name of the collection it belongs to. The type representing a Document. The value of the partition key. @@ -2030,22 +3548,8 @@ - The ReadOnlyMongoRepository implements the readonly functionality of the IReadOnlyMongoRepository. - - - - - The connection string. - - - - - The database name. - - - - - The MongoDbContext + 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. @@ -2067,131 +3571,6 @@ A mongodb context implementing - - - Asynchronously returns one document given its id. - - The type representing a Document. - The Id of the document you want to get. - An optional partition key. - - - - Returns one document given its id. - - The type representing a Document. - The Id of the document you want to get. - An optional partition key. - - - - Asynchronously returns one document given an expression filter. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - - - - Returns one document given an expression filter. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - - - - Returns a collection cursor. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - - - - Returns true if any of the document of the collection matches the filter condition. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - - - - Returns true if any of the document of the collection matches the filter condition. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - - - - Asynchronously returns a list of the documents matching the filter condition. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - - - - Returns a list of the documents matching the filter condition. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - - - - Asynchronously counts how many documents match the filter condition. - - The type representing a Document. - A LINQ expression filter. - An optional partitionKey - - - - Counts how many documents match the filter condition. - - The type representing a Document. - A LINQ expression filter. - An optional partitionKey - - - - Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. - - The document type. - A LINQ expression filter. - A property selector to order by descending. - An optional partitionKey. - - - - Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. - - The document type. - A LINQ expression filter. - A property selector to order by descending. - An optional partitionKey. - - - - - Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. - - The document type. - A LINQ expression filter. - A property selector to order by ascending. - An optional partitionKey. - - - - Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. - - The document type. - A LINQ expression filter. - A property selector to order by ascending. - An optional partitionKey. - Asynchronously returns one document given its id. @@ -2331,56 +3710,15 @@ A property selector to order by ascending. An optional partitionKey. - - - Gets the minimum value of a property in a mongodb collections that is satisfying the filter. - - The document type. - The type of the primary key. - The type of the value used to order the query. - A LINQ expression filter. - A property selector to order by ascending. - An optional partition key. - - - - Gets the minimum value of a property in a mongodb collections that is satisfying the filter. - - The document type. - The type of the primary key. - The type of the value used to order the query. - A LINQ expression filter. - A property selector to order by descending. - An optional partition key. - - - - Gets the maximum value of a property in a mongodb collections that is satisfying the filter. - - The document type. - The type of the value used to order the query. - A LINQ expression filter. - A property selector to order by ascending. - An optional partitionKey. - Gets the maximum value of a property in a mongodb collections that is satisfying the filter. The document type. The type of the primary key. - A LINQ expression filter. - A property selector to order by ascending. - An optional partitionKey. - - - - Gets the maximum value of a property in a mongodb collections that is satisfying the filter. - - The document type. The type of the value used to order the query. A LINQ expression filter. - A property selector to order by ascending. + A property selector to select the max value. An optional partitionKey. @@ -2394,16 +3732,6 @@ A property selector to order by ascending. An optional partitionKey. - - - Gets the minimum value of a property in a mongodb collections that is satisfying the filter. - - The document type. - The type of the value used to order the query. - A LINQ expression filter. - A property selector to order by ascending. - An optional partition key. - Gets the minimum value of a property in a mongodb collections that is satisfying the filter. @@ -2415,16 +3743,6 @@ A property selector to order by ascending. An optional partition key. - - - Gets the minimum value of a property in a mongodb collections that is satisfying the filter. - - The document type. - The type of the value used to order the query. - A LINQ expression filter. - A property selector to order by ascending. - An optional partition key. - Gets the minimum value of a property in a mongodb collections that is satisfying the filter. @@ -2436,21 +3754,141 @@ A property selector to order by ascending. An optional partition key. - + - Gets a collections for the type TDocument with the matching partition key (if any). + Sums the values of a selected field for a given filtered collection of documents. - The document type. - An optional partition key. - An + The type representing a Document. + The type of the primary key. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. - + - Gets a collections for the type TDocument + Sums the values of a selected field for a given filtered collection of documents. - The document type. - The document. - + The type representing a Document. + The type of the primary key. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + The type of the primary key. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + The type of the primary key. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Asynchronously returns a projected document matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Returns a projected document matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + The document filter. + The projection expression. + An optional partition key. + + + + 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. + + The type representing a Document. + The type of the primary key for a Document. + The type of the grouping criteria. + The type of the projected group. + The grouping criteria. + The projected group result. + The partition key of your document, if any. + + + + 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. + + The type representing a Document. + The type of the primary key for a Document. + The type of the grouping criteria. + The type of the projected group. + A LINQ expression filter. + The grouping criteria. + The projected group result. + The partition key of your document, if any. + + + + Asynchronously returns a paginated list of the documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + The property selector. + Order of the sorting. + The number of documents you want to skip. Default value is 0. + The number of documents you want to take. Default value is 50. + An optional partition key. + + + + Asynchronously returns a paginated list of the documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + The sort definition. + The number of documents you want to skip. Default value is 0. + The number of documents you want to take. Default value is 50. + An optional partition key. @@ -2461,23 +3899,6 @@ The document. - - - Gets a collections for a potentially partitioned document type. - - The document type. - The collection partition key. - - - - - Gets a collections for the type TDocument with a partition key. - - The document type. - The type of the primary key. - The collection partition key. - - Gets a collections for a potentially partitioned document type. @@ -2487,13 +3908,22 @@ The collection partition key. - + - Converts a LINQ expression of TDocument, TValue to a LINQ expression of TDocument, object + Gets a collections for a potentially partitioned document type. The document type. - The type of the value. - The expression to convert + The document. + + + + + Gets a collections for the type TDocument with a partition key. + + The document type. + The type of the primary key. + The collection partition key. + diff --git a/MongoDbGenericRepository/lib/netstandard1.5/MongoDbGenericRepository.deps.json b/MongoDbGenericRepository/lib/netstandard1.5/MongoDbGenericRepository.deps.json index e5ec7b9..e4f4d91 100644 --- a/MongoDbGenericRepository/lib/netstandard1.5/MongoDbGenericRepository.deps.json +++ b/MongoDbGenericRepository/lib/netstandard1.5/MongoDbGenericRepository.deps.json @@ -36,7 +36,10 @@ "System.Threading": "4.3.0" }, "runtime": { - "lib/netstandard1.3/DnsClient.dll": {} + "lib/netstandard1.3/DnsClient.dll": { + "assemblyVersion": "1.0.7.0", + "fileVersion": "1.0.7.0" + } } }, "Microsoft.NETCore.Platforms/1.1.0": {}, @@ -69,7 +72,10 @@ "System.Reflection.Emit.Lightweight": "4.0.1" }, "runtime": { - "lib/netstandard1.5/MongoDB.Bson.dll": {} + "lib/netstandard1.5/MongoDB.Bson.dll": { + "assemblyVersion": "2.7.0.0", + "fileVersion": "2.7.0.0" + } } }, "MongoDB.Driver/2.7.0": { @@ -81,7 +87,10 @@ "System.Linq.Queryable": "4.0.1" }, "runtime": { - "lib/netstandard1.5/MongoDB.Driver.dll": {} + "lib/netstandard1.5/MongoDB.Driver.dll": { + "assemblyVersion": "2.7.0.0", + "fileVersion": "2.7.0.0" + } } }, "MongoDB.Driver.Core/2.7.0": { @@ -96,7 +105,10 @@ "System.Security.SecureString": "4.0.0" }, "runtime": { - "lib/netstandard1.5/MongoDB.Driver.Core.dll": {} + "lib/netstandard1.5/MongoDB.Driver.Core.dll": { + "assemblyVersion": "2.7.0.0", + "fileVersion": "2.7.0.0" + } } }, "NETStandard.Library/1.6.1": { @@ -197,7 +209,10 @@ "System.Threading": "4.3.0" }, "runtime": { - "lib/netstandard1.1/System.Buffers.dll": {} + "lib/netstandard1.1/System.Buffers.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.6.24705.1" + } } }, "System.Collections/4.3.0": { @@ -221,7 +236,10 @@ "System.Threading.Tasks": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.Collections.Concurrent.dll": {} + "lib/netstandard1.3/System.Collections.Concurrent.dll": { + "assemblyVersion": "4.0.13.0", + "fileVersion": "4.6.24705.1" + } } }, "System.Collections.NonGeneric/4.0.1": { @@ -234,7 +252,10 @@ "System.Threading": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.Collections.NonGeneric.dll": {} + "lib/netstandard1.3/System.Collections.NonGeneric.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "1.0.24212.1" + } } }, "System.Collections.Specialized/4.0.1": { @@ -248,7 +269,10 @@ "System.Threading": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.Collections.Specialized.dll": {} + "lib/netstandard1.3/System.Collections.Specialized.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "1.0.24212.1" + } } }, "System.ComponentModel/4.0.1": { @@ -256,7 +280,10 @@ "System.Runtime": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.ComponentModel.dll": {} + "lib/netstandard1.3/System.ComponentModel.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "1.0.24212.1" + } } }, "System.ComponentModel.Primitives/4.1.0": { @@ -266,7 +293,10 @@ "System.Runtime": "4.3.0" }, "runtime": { - "lib/netstandard1.0/System.ComponentModel.Primitives.dll": {} + "lib/netstandard1.0/System.ComponentModel.Primitives.dll": { + "assemblyVersion": "4.1.0.0", + "fileVersion": "1.0.24212.1" + } } }, "System.ComponentModel.TypeConverter/4.1.0": { @@ -288,7 +318,10 @@ "System.Threading": "4.3.0" }, "runtime": { - "lib/netstandard1.5/System.ComponentModel.TypeConverter.dll": {} + "lib/netstandard1.5/System.ComponentModel.TypeConverter.dll": { + "assemblyVersion": "4.1.0.0", + "fileVersion": "1.0.24212.1" + } } }, "System.Console/4.3.0": { @@ -316,7 +349,10 @@ "System.Threading": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.Diagnostics.DiagnosticSource.dll": {} + "lib/netstandard1.3/System.Diagnostics.DiagnosticSource.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.6.24705.1" + } } }, "System.Diagnostics.Process/4.1.0": { @@ -390,7 +426,10 @@ "System.Threading": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.Dynamic.Runtime.dll": {} + "lib/netstandard1.3/System.Dynamic.Runtime.dll": { + "assemblyVersion": "4.0.11.0", + "fileVersion": "1.0.24212.1" + } } }, "System.Globalization/4.3.0": { @@ -459,7 +498,10 @@ "System.Text.Encoding": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.IO.Compression.ZipFile.dll": {} + "lib/netstandard1.3/System.IO.Compression.ZipFile.dll": { + "assemblyVersion": "4.0.2.0", + "fileVersion": "4.6.24705.1" + } } }, "System.IO.FileSystem/4.3.0": { @@ -479,7 +521,10 @@ "System.Runtime": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.IO.FileSystem.Primitives.dll": {} + "lib/netstandard1.3/System.IO.FileSystem.Primitives.dll": { + "assemblyVersion": "4.0.2.0", + "fileVersion": "4.6.24705.1" + } } }, "System.Linq/4.3.0": { @@ -506,7 +551,10 @@ "System.Runtime": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.Linq.Queryable.dll": {} + "lib/netstandard1.3/System.Linq.Queryable.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "1.0.24212.1" + } } }, "System.Net.Http/4.3.0": { @@ -629,7 +677,10 @@ "System.Threading": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.ObjectModel.dll": {} + "lib/netstandard1.3/System.ObjectModel.dll": { + "assemblyVersion": "4.0.13.0", + "fileVersion": "4.6.24705.1" + } } }, "System.Reflection/4.3.0": { @@ -650,7 +701,10 @@ "System.Runtime": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.Reflection.Emit.dll": {} + "lib/netstandard1.3/System.Reflection.Emit.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "1.0.24212.1" + } } }, "System.Reflection.Emit.ILGeneration/4.0.1": { @@ -660,7 +714,10 @@ "System.Runtime": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.Reflection.Emit.ILGeneration.dll": {} + "lib/netstandard1.3/System.Reflection.Emit.ILGeneration.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "1.0.24212.1" + } } }, "System.Reflection.Emit.Lightweight/4.0.1": { @@ -671,7 +728,10 @@ "System.Runtime": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.Reflection.Emit.Lightweight.dll": {} + "lib/netstandard1.3/System.Reflection.Emit.Lightweight.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "1.0.24212.1" + } } }, "System.Reflection.Extensions/4.3.0": { @@ -695,7 +755,10 @@ "System.Runtime": "4.3.0" }, "runtime": { - "lib/netstandard1.5/System.Reflection.TypeExtensions.dll": {} + "lib/netstandard1.5/System.Reflection.TypeExtensions.dll": { + "assemblyVersion": "4.1.0.0", + "fileVersion": "1.0.24212.1" + } } }, "System.Resources.ResourceManager/4.3.0": { @@ -748,7 +811,10 @@ "runtime.native.System": "4.3.0" }, "runtime": { - "lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll": {} + "lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.6.24705.1" + } } }, "System.Runtime.Numerics/4.3.0": { @@ -759,7 +825,10 @@ "System.Runtime.Extensions": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.Runtime.Numerics.dll": {} + "lib/netstandard1.3/System.Runtime.Numerics.dll": { + "assemblyVersion": "4.0.2.0", + "fileVersion": "4.6.24705.1" + } } }, "System.Security.Claims/4.3.0": { @@ -773,7 +842,10 @@ "System.Security.Principal": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.Security.Claims.dll": {} + "lib/netstandard1.3/System.Security.Claims.dll": { + "assemblyVersion": "4.0.2.0", + "fileVersion": "4.6.24705.1" + } } }, "System.Security.Cryptography.Algorithms/4.3.0": { @@ -810,7 +882,10 @@ "System.Threading.Tasks": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.Security.Cryptography.Primitives.dll": {} + "lib/netstandard1.3/System.Security.Cryptography.Primitives.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.6.24705.1" + } } }, "System.Security.Cryptography.X509Certificates/4.3.0": { @@ -826,7 +901,10 @@ "System.Runtime": "4.3.0" }, "runtime": { - "lib/netstandard1.0/System.Security.Principal.dll": {} + "lib/netstandard1.0/System.Security.Principal.dll": { + "assemblyVersion": "4.0.2.0", + "fileVersion": "4.6.24705.1" + } } }, "System.Security.Principal.Windows/4.3.0": { @@ -885,7 +963,10 @@ "System.Threading.Tasks": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.Threading.dll": {} + "lib/netstandard1.3/System.Threading.dll": { + "assemblyVersion": "4.0.12.0", + "fileVersion": "4.6.24705.1" + } } }, "System.Threading.Overlapped/4.3.0": { @@ -910,7 +991,10 @@ "System.Threading.Tasks": "4.3.0" }, "runtime": { - "lib/netstandard1.0/System.Threading.Tasks.Extensions.dll": {} + "lib/netstandard1.0/System.Threading.Tasks.Extensions.dll": { + "assemblyVersion": "4.1.0.0", + "fileVersion": "4.6.24705.1" + } } }, "System.Threading.Thread/4.3.0": { @@ -918,7 +1002,10 @@ "System.Runtime": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.Threading.Thread.dll": {} + "lib/netstandard1.3/System.Threading.Thread.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.6.24705.1" + } } }, "System.Threading.ThreadPool/4.3.0": { @@ -927,7 +1014,10 @@ "System.Runtime.Handles": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.Threading.ThreadPool.dll": {} + "lib/netstandard1.3/System.Threading.ThreadPool.dll": { + "assemblyVersion": "4.0.11.0", + "fileVersion": "4.6.24705.1" + } } }, "System.Threading.Timer/4.3.0": { @@ -956,7 +1046,10 @@ "System.Threading.Tasks.Extensions": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.Xml.ReaderWriter.dll": {} + "lib/netstandard1.3/System.Xml.ReaderWriter.dll": { + "assemblyVersion": "4.1.0.0", + "fileVersion": "4.6.24705.1" + } } }, "System.Xml.XDocument/4.3.0": { @@ -975,7 +1068,10 @@ "System.Xml.ReaderWriter": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.Xml.XDocument.dll": {} + "lib/netstandard1.3/System.Xml.XDocument.dll": { + "assemblyVersion": "4.0.12.0", + "fileVersion": "4.6.24705.1" + } } } } @@ -1017,7 +1113,7 @@ "Microsoft.Win32.Registry/4.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-q+eLtROUAQ3OxYA5mpQrgyFgzLQxIyrfT2eLpYX5IEPlHmIio2nh4F5bgOaQoGOV865kFKZZso9Oq9RlazvXtg==", + "sha512": "sha512-mYUxH/YY9PwvuWY93/qsovFHAh+Lu2CNxNHWxB/x0dnpaEy6oIy/9d7R2J6dFaLZ7jhE7emLjn7A8kSzsP1A+Q==", "path": "microsoft.win32.registry/4.0.0", "hashPath": "microsoft.win32.registry.4.0.0.nupkg.sha512" }, @@ -1192,14 +1288,14 @@ "System.ComponentModel.Primitives/4.1.0": { "type": "package", "serviceable": true, - "sha512": "sha512-sc/7eVCdxPrp3ljpgTKVaQGUXiW05phNWvtv/m2kocXqrUQvTVWKou1Edas2aDjTThLPZOxPYIGNb/HN0QjURg==", + "sha512": "sha512-mAaj8PXxM7hUSIJYm9chhSe90HaIVyl8vb4JJO0M7fRaeBqSaaveHdRAmOL0LcOxp7kf9Vb8HujCe02DUqG5HQ==", "path": "system.componentmodel.primitives/4.1.0", "hashPath": "system.componentmodel.primitives.4.1.0.nupkg.sha512" }, "System.ComponentModel.TypeConverter/4.1.0": { "type": "package", "serviceable": true, - "sha512": "sha512-MnDAlaeJZy9pdB5ZdOlwdxfpI+LJQ6e0hmH7d2+y2LkiD8DRJynyDYl4Xxf3fWFm7SbEwBZh4elcfzONQLOoQw==", + "sha512": "sha512-jcj79VC96yxc/rgLB59+g4675iVts1XrfC97dniMEvmJhRl8cG7qRO3EsJQwNw8cFL6RenFxn/CGfUhgj32SdQ==", "path": "system.componentmodel.typeconverter/4.1.0", "hashPath": "system.componentmodel.typeconverter.4.1.0.nupkg.sha512" }, @@ -1227,7 +1323,7 @@ "System.Diagnostics.Process/4.1.0": { "type": "package", "serviceable": true, - "sha512": "sha512-mpVZ5bnlSs3tTeJ6jYyDJEIa6tavhAd88lxq1zbYhkkCu0Pno2+gHXcvZcoygq2d8JxW3gojXqNJMTAshduqZA==", + "sha512": "sha512-4dlFhzwmI3hl32P+8c9hnytYtV7Xldhsokm5i7Fvv5PmTS68TQCfsuJrREIyF9N1B8zlsSomp7AVrXLe45kKFQ==", "path": "system.diagnostics.process/4.1.0", "hashPath": "system.diagnostics.process.4.1.0.nupkg.sha512" }, @@ -1241,7 +1337,7 @@ "System.Diagnostics.TraceSource/4.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-6WVCczFZKXwpWpzd/iJkYnsmWTSFFiU24Xx/YdHXBcu+nFI/ehTgeqdJQFbtRPzbrO3KtRNjvkhtj4t5/WwWsA==", + "sha512": "sha512-bGUeY5wiCHYSWbYZS3QjbaQ1hNoJ1RQBQMB3E0Cgh6AH//4rXfXIOHKIW46HDOsTEDoNfvFNDXphL5W5B/XMwQ==", "path": "system.diagnostics.tracesource/4.0.0", "hashPath": "system.diagnostics.tracesource.4.0.0.nupkg.sha512" }, @@ -1353,7 +1449,7 @@ "System.Net.NetworkInformation/4.3.0": { "type": "package", "serviceable": true, - "sha512": "sha512-zNVmWVry0pAu7lcrRBhwwU96WUdbsrGL3azyzsbXmVNptae1+Za+UgOe9Z6s8iaWhPn7/l4wQqhC56HZWq7tkg==", + "sha512": "sha512-MKLDZXuBZOS348egaxkMgwSUHIIhykVf0pudpfSdzjKmkRpVCzqkpysPHHp8HfckYAhuXRM+UgxWPgFTHF8Trg==", "path": "system.net.networkinformation/4.3.0", "hashPath": "system.net.networkinformation.4.3.0.nupkg.sha512" }, @@ -1367,7 +1463,7 @@ "System.Net.Security/4.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-uM1JaYJciCc2w7efD6du0EpQ1n5ZQqE6/P43/aI4H5E59qvP+wt3l70KIUF/Ha7NaeXGoGNFPVO0MB80pVHk2g==", + "sha512": "sha512-iavC4j5XrRyX3aXbn23jHHF0NTxw9F+2vi3a94VY4BgfrYm5VQBh8OzU1TkNahTSlcKzjGhEc7ZfTfe4b62J6Q==", "path": "system.net.security/4.0.0", "hashPath": "system.net.security.4.0.0.nupkg.sha512" }, @@ -1535,7 +1631,7 @@ "System.Security.SecureString/4.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-sqzq9GD6/b0yqPuMpgIKBuoLf4VKAj8oAfh4kXSzPaN6eoKY3hRi9C5L27uip25qlU+BGPfb0xh2Rmbwc4jFVA==", + "sha512": "sha512-7TGOnj9Lr8ljCJbMHjZC34hEw3Z+zRPp7eNhLBg22mbSqO8gQMGLJ/vQkWv8HFYG0t2i53ZulKZ8NNho+jVK7Q==", "path": "system.security.securestring/4.0.0", "hashPath": "system.security.securestring.4.0.0.nupkg.sha512" }, @@ -1570,7 +1666,7 @@ "System.Threading.Overlapped/4.3.0": { "type": "package", "serviceable": true, - "sha512": "sha512-m3HQ2dPiX/DSTpf+yJt8B0c+SRvzfqAJKx+QDWi+VLhz8svLT23MVjEOHPF/KiSLeArKU/iHescrbLd3yVgyNg==", + "sha512": "sha512-JpukcZA7kre2gQ7GrhtvZu1xv/LVEG5HV9AajQ3XV7l36T6ICalw/llfkBHeK/eqo8UWpMNqkWGCzzlSuqE6pg==", "path": "system.threading.overlapped/4.3.0", "hashPath": "system.threading.overlapped.4.3.0.nupkg.sha512" }, diff --git a/MongoDbGenericRepository/lib/netstandard1.5/MongoDbGenericRepository.dll b/MongoDbGenericRepository/lib/netstandard1.5/MongoDbGenericRepository.dll index 0b548bc1de2c4d79fdd963471d26b4a72ca69653..354aff22e2ac0c34a1ec2775ded10e6ec7ad415e 100644 GIT binary patch literal 154624 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 AA^-pY literal 99840 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

- The IBaseMongoRepository exposes the CRUD functionality of the BaseMongoRepository. + The IBaseMongoRepository interface exposes the CRUD functionality of the BaseMongoRepository. - - - Asynchronously adds a document to the collection. - - The type representing a Document. - The document you want to add. - - - - Adds a document to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The document you want to add. - - - - Asynchronously adds a list of documents to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The document you want to add. - - - - Adds a list of documents to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The document you want to add. - - - - Asynchronously adds a document to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to add. - - - - Adds a document to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to add. - - - - Asynchronously adds a list of documents to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The type of the primary key for a Document. - The documents you want to add. - - - - Adds a list of documents to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The type of the primary key for a Document. - The documents you want to add. - - - - Asynchronously Updates a document. - - The type representing a Document. - The document with the modifications you want to persist. - - - - Updates a document. - - The type representing a Document. - The document with the modifications you want to persist. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - For the entity selected by the filter, updates the property field with the given value. - - The type representing a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The partition key for the document. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The document you want to modify. - The update definition for the document. - - - - For the entity selected by the filter, updates the property field with the given value. - - The type representing a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The partition key for the document. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The document you want to modify. - The update definition for the document. - - - - Asynchronously Updates a document. - - The type representing a Document. - The type of the primary key for a Document. - The document with the modifications you want to persist. - - - - Updates a document. - - The type representing a Document. - The type of the primary key for a Document. - The document with the modifications you want to persist. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to modify. - The update definition for the document. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to modify. - The update definition for the document. - - - - For the entity selected by the filter, updates the property field with the given value.. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The partition key for the document. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - For the entity selected by the filter, updates the property field with the given value. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The partition key for the document. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - Asynchronously deletes a document. - - The type representing a Document. - The document you want to delete. - The number of documents deleted. - - - - Asynchronously deletes a document matching the condition of the LINQ expression filter. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Deletes a document. - - The type representing a Document. - The document you want to delete. - The number of documents deleted. - - - - Deletes a document matching the condition of the LINQ expression filter. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously deletes the documents matching the condition of the LINQ expression filter. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously deletes a list of documents. - - The type representing a Document. - The list of documents to delete. - The number of documents deleted. - - - - Deletes a list of documents. - - The type representing a Document. - The list of documents to delete. - The number of documents deleted. - - - - Deletes the documents matching the condition of the LINQ expression filter. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Deletes a document. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to delete. - The number of documents deleted. - - - - Asynchronously deletes a document matching the condition of the LINQ expression filter. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to delete. - The number of documents deleted. - - - - Deletes a document matching the condition of the LINQ expression filter. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously deletes a document matching the condition of the LINQ expression filter. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously deletes the documents matching the condition of the LINQ expression filter. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously deletes a list of documents. - - The type representing a Document. - The type of the primary key for a Document. - The list of documents to delete. - The number of documents deleted. - - - - Deletes a list of documents. - - The type representing a Document. - The type of the primary key for a Document. - The list of documents to delete. - The number of documents deleted. - - - - Deletes the documents matching the condition of the LINQ expression filter. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously returns a projected document matching the filter condition. - - The type representing a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Asynchronously returns a projected document matching the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Returns a projected document matching the filter condition. - - The type representing a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Returns a projected document matching the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Asynchronously returns a list of projected documents matching the filter condition. - - The type representing a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Asynchronously returns a list of projected documents matching the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Asynchronously returns a list of projected documents matching the filter condition. - - The type representing a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Asynchronously returns a list of projected documents matching the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - Asynchronously returns a paginated list of the documents matching the filter condition. @@ -544,19 +51,289 @@ - + - Groups a collection of documents given a grouping criteria, - and returns a list of projected documents. + The IBaseReadOnlyRepository exposes the generic Read Only functionality of the BaseMongoRepository. + + + + + The connection string. + + + + + The database name. + + + + + Asynchronously returns one document given its id. The type representing a Document. - The type of the grouping criteria. - The type of the projected group. - The grouping criteria. - The projected group result. + The type of the primary key for a Document. + The Id of the document you want to get. + An optional partition key. + + + + Returns one document given its id. + + The type representing a Document. + The type of the primary key for a Document. + The Id of the document you want to get. + An optional partition key. + + + + Asynchronously returns one document given an expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns one document given an expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns a collection cursor. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns true if any of the document of the collection matches the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns true if any of the document of the collection matches the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Asynchronously returns a list of the documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns a list of the documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Asynchronously counts how many documents match the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partitionKey + + + + Counts how many documents match the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partitionKey + + + + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + The type of the primary key. + A LINQ expression filter. + A property selector to order by descending. + An optional partitionKey. + + + + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + The type of the primary key. + A LINQ expression filter. + A property selector to order by descending. + An optional partitionKey. + + + + Gets the document with the minimum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + The type of the primary key. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the document with the minimum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + The type of the primary key. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the maximum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the primary key. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the maximum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the primary key. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the minimum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the primary key. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partition key. + + + + Gets the minimum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the primary key. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partition key. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + The type of the primary key. + A LINQ expression filter. + The field you want to sum. The partition key of your document, if any. - + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + The type of the primary key. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + The type of the primary key. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + The type of the primary key. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Asynchronously returns a projected document matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + + The projection expression. + An optional partition key. + + + + Returns a projected document matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + + The projection expression. + An optional partition key. + + 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. @@ -564,174 +341,49 @@ The type representing a Document. The type of the grouping criteria. The type of the projected group. - - The grouping criteria. - The projected group result. + The type of the primary key. + The grouping criteria. + The projected group result. The partition key of your document, if any. - + - The repository interface for managing indexes - - - - - Create a text index on the given field. - IndexCreationOptions can be supplied to further specify - how the creation should be done. + 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. The type representing a Document. - The field we want to index. - Options for creating an index. - An optional partition key. - The result of the create index operation. + The type of the grouping criteria. + The type of the projected group. + The type of the primary key. + A LINQ expression filter. + The grouping criteria. + The projected group result. + The partition key of your document, if any. - + - Create a text index on the given field. - IndexCreationOptions can be supplied to further specify - how the creation should be done. + Asynchronously returns a paginated list of the documents matching the filter condition. The type representing a Document. The type of the primary key for a Document. - The field we want to index. - Options for creating an index. + A LINQ expression filter. + The property selector. + Order of the sorting. + The number of documents you want to skip. Default value is 0. + The number of documents you want to take. Default value is 50. An optional partition key. - The result of the create index operation. - + - Creates an index on the given field in ascending order. - IndexCreationOptions can be supplied to further specify - how the creation should be done. - - The type representing a Document. - The field we want to index. - Options for creating an index. - An optional partition key. - The result of the create index operation. - - - - Creates an index on the given field in ascending order. - IndexCreationOptions can be supplied to further specify - how the creation should be done. + Asynchronously returns a paginated list of the documents matching the filter condition. The type representing a Document. The type of the primary key for a Document. - The field we want to index. - Options for creating an index. + A LINQ expression filter. + The sort definition. + The number of documents you want to skip. Default value is 0. + The number of documents you want to take. Default value is 50. An optional partition key. - The result of the create index operation. - - - - Creates an index on the given field in descending order. - IndexCreationOptions can be supplied to further specify - how the creation should be done. - - The type representing a Document. - The field we want to index. - Options for creating an index. - An optional partition key. - A string containing the result of the operation. - - - - Creates an index on the given field in descending order. - IndexCreationOptions can be supplied to further specify - how the creation should be done. - - The type representing a Document. - The type of the primary key for a Document. - The field we want to index. - Options for creating an index. - An optional partition key. - The result of the create index operation. - - - - Creates a hashed index on the given field. - IndexCreationOptions can be supplied to further specify - how the creation should be done. - - The type representing a Document. - The field we want to index. - Options for creating an index. - An optional partition key. - A string containing the result of the operation. - - - - Creates a hashed index on the given field. - IndexCreationOptions can be supplied to further specify - how the creation should be done. - - The type representing a Document. - The type of the primary key for a Document. - The field we want to index. - Options for creating an index. - An optional partition key. - The result of the create index operation. - - - - Creates a combined text index. - IndexCreationOptions can be supplied to further specify - how the creation should be done. - - The type representing a Document. - The fields we want to index. - Options for creating an index. - An optional partition key. - The result of the create index operation. - - - - Creates a combined text index. - IndexCreationOptions can be supplied to further specify - how the creation should be done. - - The type representing a Document. - The type of the primary key for a Document. - The fields we want to index. - Options for creating an index. - An optional partition key. - The result of the create index operation. - - - - Drops the index given a field name - - The type representing a Document. - The name of the index - An optional partition key - - - - Drops the index given a field name - - The type representing a Document. - The type of the primary key for a Document. - The name of the index - An optional partition key - - - - Returns the names of the indexes present on a collection. - - The type representing a Document. - An optional partition key - A list containing the names of the indexes on on the concerned collection. - - - - Returns the names of the indexes present on a collection. - - The type representing a Document. - The type of the primary key for a Document. - An optional partition key - A list containing the names of the indexes on on the concerned collection. @@ -772,17 +424,7 @@ The IReadOnlyMongoRepository exposes the readonly functionality of the BaseMongoRepository. - - - The connection string. - - - - - The database name. - - - + Asynchronously returns one document given its id. @@ -790,7 +432,7 @@ The Id of the document you want to get. An optional partition key. - + Returns one document given its id. @@ -798,7 +440,7 @@ The Id of the document you want to get. An optional partition key. - + Asynchronously returns one document given an expression filter. @@ -806,7 +448,7 @@ A LINQ expression filter. An optional partition key. - + Returns one document given an expression filter. @@ -814,7 +456,7 @@ A LINQ expression filter. An optional partition key. - + Returns a collection cursor. @@ -822,7 +464,7 @@ A LINQ expression filter. An optional partition key. - + Asynchronously returns true if any of the document of the collection matches the filter condition. @@ -830,7 +472,7 @@ A LINQ expression filter. An optional partition key. - + Returns true if any of the document of the collection matches the filter condition. @@ -838,7 +480,7 @@ A LINQ expression filter. An optional partition key. - + Asynchronously returns a list of the documents matching the filter condition. @@ -846,7 +488,7 @@ A LINQ expression filter. An optional partition key. - + Returns a list of the documents matching the filter condition. @@ -854,7 +496,7 @@ A LINQ expression filter. An optional partition key. - + Asynchronously counts how many documents match the filter condition. @@ -862,7 +504,7 @@ A LINQ expression filter. An optional partition key. - + Counts how many documents match the filter condition. @@ -870,106 +512,7 @@ A LINQ expression filter. An optional partition key. - - - Asynchronously returns one document given its id. - - The type representing a Document. - The type of the primary key for a Document. - The Id of the document you want to get. - An optional partition key. - - - - Returns one document given its id. - - The type representing a Document. - The type of the primary key for a Document. - The Id of the document you want to get. - An optional partition key. - - - - Asynchronously returns one document given an expression filter. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - - - - Returns one document given an expression filter. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - - - - Returns a collection cursor. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - - - - Returns true if any of the document of the collection matches the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - - - - Returns true if any of the document of the collection matches the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - - - - Asynchronously returns a list of the documents matching the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - - - - Returns a list of the documents matching the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - - - - Asynchronously counts how many documents match the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partitionKey - - - - Counts how many documents match the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partitionKey - - + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. @@ -978,7 +521,7 @@ A property selector to order by descending. An optional partitionKey. - + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. @@ -988,7 +531,7 @@ An optional partitionKey. - + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. @@ -997,7 +540,7 @@ A property selector to order by ascending. An optional partitionKey. - + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. @@ -1006,47 +549,7 @@ A property selector to order by ascending. An optional partitionKey. - - - Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. - - The document type. - The type of the primary key. - A LINQ expression filter. - A property selector to order by descending. - An optional partitionKey. - - - - Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. - - The document type. - The type of the primary key. - A LINQ expression filter. - A property selector to order by descending. - An optional partitionKey. - - - - Gets the document with the minimum value of a specified property in a MongoDB collections that is satisfying the filter. - - The document type. - The type of the primary key. - A LINQ expression filter. - A property selector to order by ascending. - An optional partitionKey. - - - - Gets the document with the minimum value of a specified property in a MongoDB collections that is satisfying the filter. - - The document type. - The type of the primary key. - A LINQ expression filter. - A property selector to order by ascending. - An optional partitionKey. - - + Gets the maximum value of a property in a mongodb collections that is satisfying the filter. @@ -1056,17 +559,7 @@ A property selector to order by ascending. An optional partitionKey. - - - Gets the maximum value of a property in a mongodb collections that is satisfying the filter. - - The document type. - The type of the primary key. - A LINQ expression filter. - A property selector to order by ascending. - An optional partitionKey. - - + Gets the maximum value of a property in a mongodb collections that is satisfying the filter. @@ -1076,17 +569,7 @@ A property selector to order by ascending. An optional partitionKey. - - - Gets the maximum value of a property in a mongodb collections that is satisfying the filter. - - The document type. - The type of the primary key. - A LINQ expression filter. - A property selector to order by ascending. - An optional partitionKey. - - + Gets the minimum value of a property in a mongodb collections that is satisfying the filter. @@ -1096,18 +579,7 @@ A property selector to order by ascending. An optional partition key. - - - Gets the minimum value of a property in a mongodb collections that is satisfying the filter. - - The document type. - The type of the primary key. - The type of the value used to order the query. - A LINQ expression filter. - A property selector to order by ascending. - An optional partition key. - - + Gets the minimum value of a property in a mongodb collections that is satisfying the filter. @@ -1117,17 +589,108 @@ A property selector to order by ascending. An optional partition key. - + - Gets the minimum value of a property in a mongodb collections that is satisfying the filter. + Sums the values of a selected field for a given filtered collection of documents. - The document type. - The type of the primary key. - The type of the value used to order the query. + The type representing a Document. A LINQ expression filter. - A property selector to order by ascending. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Asynchronously returns a projected document matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. An optional partition key. + + + Returns a projected document matching the filter condition. + + The type representing a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Groups a collection of documents given a grouping criteria, + and returns a dictionary of listed document groups with keys having the different values of the grouping criteria. + + The type representing a Document. + The type of the grouping criteria. + The type of the projected group. + The grouping criteria. + The projected group result. + The partition key of your document, if any. + + + + 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. + + The type representing a Document. + The type of the grouping criteria. + The type of the projected group. + A LINQ expression filter. + The grouping criteria. + The projected group result. + The partition key of your document, if any. + This attribute allows you to specify of the name of the collection. @@ -1148,6 +711,42 @@ The name of the collection. + + + Asynchronously adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to add. + + + + Adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to add. + + + + Asynchronously adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The documents you want to add. + + + + Adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The documents you want to add. + The base Repository, it is meant to be inherited from by your custom custom MongoRepository implementation. @@ -1157,57 +756,14 @@ 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. - - - The constructor taking a connection string and a database name. + 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. - The connection string of the MongoDb server. - The name of the database against which you want to perform operations. - - - The contructor taking a . + 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. - A mongodb context implementing - - - - The contructor taking a . - - A mongodb context implementing - - - - Asynchronously adds a document to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The document you want to add. - - - - Adds a document to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The document you want to add. - - - - Asynchronously adds a list of documents to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The documents you want to add. - - - - Adds a list of documents to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The documents you want to add. @@ -1218,6 +774,14 @@ The type of the primary key for a Document. The document you want to add. + + + Asynchronously adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The document you want to add. + Adds a document to the collection. @@ -1227,6 +791,14 @@ The type of the primary key for a Document. The document you want to add. + + + Adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The document you want to add. + Asynchronously adds a list of documents to the collection. @@ -1236,6 +808,14 @@ The type of the primary key for a Document. The documents you want to add. + + + Asynchronously adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The documents you want to add. + Adds a list of documents to the collection. @@ -1245,203 +825,13 @@ The type of the primary key for a Document. The documents you want to add. - + - Asynchronously Updates a document. + Adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. The type representing a Document. - The document with the modifications you want to persist. - - - - Updates a document. - - The type representing a Document. - The document with the modifications you want to persist. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The document you want to modify. - The update definition for the document. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - For the entity selected by the filter, updates the property field with the given value. - - The type representing a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The partition key for the document. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - For the entity selected by the filter, updates the property field with the given value. - - The type representing a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The partition key for the document. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The document you want to modify. - The update definition for the document. - - - - Asynchronously Updates a document. - - The type representing a Document. - The type of the primary key for a Document. - The document with the modifications you want to persist. - - - - Updates a document. - - The type representing a Document. - The type of the primary key for a Document. - The document with the modifications you want to persist. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to modify. - The update definition for the document. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to modify. - The update definition for the document. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - For the entity selected by the filter, updates the property field with the given value. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The partition key for the document. - - - - Updates the property field with the given value. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - For the entity selected by the filter, updates the property field with the given value. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The partition key for the document. + The documents you want to add. @@ -1587,121 +977,154 @@ An optional partition key. The number of documents deleted. - + - Asynchronously returns a projected document matching the filter condition. - - The type representing a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Asynchronously returns a projected document matching the filter condition. + Returns the names of the indexes present on a collection. The type representing a Document. The type of the primary key for a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. + An optional partition key + A list containing the names of the indexes on on the concerned collection. - + - Returns a projected document matching the filter condition. + Returns the names of the indexes present on a collection. The type representing a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. + An optional partition key + A list containing the names of the indexes on on the concerned collection. - + - Returns a projected document matching the filter condition. + Create a text index on the given field. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Create a text index on the given field. + IndexCreationOptions can be supplied to further specify + how the creation should be done. The type representing a Document. The type of the primary key for a Document. - The type representing the model you want to project to. - - The projection expression. + The field we want to index. + Options for creating an index. An optional partition key. + The result of the create index operation. - + - Asynchronously returns a list of projected documents matching the filter condition. + Creates an index on the given field in ascending order. + IndexCreationOptions can be supplied to further specify + how the creation should be done. The type representing a Document. - The type representing the model you want to project to. - - The projection expression. + The field we want to index. + Options for creating an index. An optional partition key. + The result of the create index operation. - + - Asynchronously returns a list of projected documents matching the filter condition. + Creates an index on the given field in ascending order. + IndexCreationOptions can be supplied to further specify + how the creation should be done. The type representing a Document. The type of the primary key for a Document. - The type representing the model you want to project to. - - The projection expression. + The field we want to index. + Options for creating an index. An optional partition key. + The result of the create index operation. - + - Asynchronously returns a list of projected documents matching the filter condition. + Creates an index on the given field in descending order. + IndexCreationOptions can be supplied to further specify + how the creation should be done. The type representing a Document. - The type representing the model you want to project to. - - The projection expression. + The field we want to index. + Options for creating an index. An optional partition key. + The result of the create index operation. - + + + + - Asynchronously returns a list of projected documents matching the filter condition. + Creates a hashed index on the given field. + IndexCreationOptions can be supplied to further specify + how the creation should be done. The type representing a Document. - The type of the primary key for a Document. - The type representing the model you want to project to. - The document filter. - The projection expression. + The field we want to index. + Options for creating an index. An optional partition key. + The result of the create index operation. - + + + + - Groups a collection of documents given a grouping criteria, - and returns a dictionary of listed document groups with keys having the different values of the grouping criteria. + Creates a combined text index. + IndexCreationOptions can be supplied to further specify + how the creation should be done. The type representing a Document. - The type of the grouping criteria. - The type of the projected group. - The grouping criteria. - The projected group result. - The partition key of your document, if any. + The fields we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. - + + + + - 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. + Drops the index given a field name The type representing a Document. - The type of the grouping criteria. - The type of the projected group. - - The grouping criteria. - The projected group result. - The partition key of your document, if any. + The name of the index + An optional partition key + + + + + + + The constructor taking a connection string and a database name. + + The connection string of the MongoDb server. + The name of the database against which you want to perform operations. + + + + The contructor taking a . + + A mongodb context implementing + + + + The contructor taking a . + + A mongodb context implementing Asynchronously returns a paginated list of the documents matching the filter condition. The type representing a Document. - + A LINQ expression filter. The number of documents you want to skip. Default value is 0. The number of documents you want to take. Default value is 50. An optional partition key. @@ -1712,7 +1135,7 @@ The type representing a Document. The type of the primary key for a Document. - + A LINQ expression filter. The number of documents you want to skip. Default value is 0. The number of documents you want to take. Default value is 50. An optional partition key. @@ -1722,7 +1145,7 @@ GetAndUpdateOne with filter The type representing a Document. - + A LINQ expression filter. @@ -1733,7 +1156,7 @@ The type representing a Document. The type of the primary key for a Document. - + A LINQ expression filter. @@ -1753,47 +1176,2135 @@ The document type. The document. - - + + + Gets a collections for a potentially partitioned document type. + + The document type. + The collection partition key. + - - + + + Gets a collections for the type TDocument with a partition key. + + The document type. + The collection partition key. + - - + + + Asynchronously Updates a document. + + The type representing a Document. + The document with the modifications you want to persist. - - + + + Updates a document. + + The type representing a Document. + The document with the modifications you want to persist. - - + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The document you want to modify. + The update definition for the document. - - + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The document you want to modify. + The update definition for the document. - - + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. - - + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. - - + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. - - + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. - - + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. - - + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. - - + + + Asynchronously Updates a document. + + The type representing a Document. + The type of the primary key for a Document. + The document with the modifications you want to persist. - - + + + Updates a document. + + The type representing a Document. + The type of the primary key for a Document. + The document with the modifications you want to persist. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to modify. + The update definition for the document. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to modify. + The update definition for the document. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. + + + + Deletes a document. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to delete. + The number of documents deleted. + + + + Asynchronously deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to delete. + The number of documents deleted. + + + + Deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a list of documents. + + The type representing a Document. + The type of the primary key for a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes a list of documents. + + The type representing a Document. + The type of the primary key for a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Returns the names of the indexes present on a collection. + + The type representing a Document. + The type of the primary key for a Document. + An optional partition key + A list containing the names of the indexes on on the concerned collection. + + + + Create a text index on the given field. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The type of the primary key for a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates an index on the given field in ascending order. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The type of the primary key for a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates an index on the given field in descending order. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The type of the primary key for a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates a hashed index on the given field. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The type of the primary key for a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates a combined text index. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The type of the primary key for a Document. + The fields we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Drops the index given a field name + + The type representing a Document. + The type of the primary key for a Document. + The name of the index + An optional partition key + + + + Asynchronously Updates a document. + + The type representing a Document. + The type of the primary key for a Document. + The document with the modifications you want to persist. + + + + Updates a document. + + The type representing a Document. + The type of the primary key for a Document. + The document with the modifications you want to persist. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to modify. + The update definition for the document. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to modify. + The update definition for the document. + + + + For the entity selected by the filter, updates the property field with the given value.. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + Gets a collections for a potentially partitioned document type. + + The document type. + The type of the primary key. + The document. + + + + + Gets a collections for the type TDocument with a partition key. + + The document type. + The type of the primary key. + The collection partition key. + + + + + Gets a collections for a potentially partitioned document type. + + The document type. + The type of the primary key. + The collection partition key. + + + + + Converts a LINQ expression of TDocument, TValue to a LINQ expression of TDocument, object + + The document type. + The type of the value. + The expression to convert + + + + Maps a IndexCreationOptions object to a MongoDB.Driver.CreateIndexOptions object + + The options for creating an index. + + + + + Gets the minimum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the primary key. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partition key. + + + + Gets the minimum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the primary key. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by descending. + An optional partition key. + + + + Asynchronously adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to add. + + + + Adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to add. + + + + Asynchronously adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The documents you want to add. + + + + Adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The documents you want to add. + + + + Sets the value of the document Id if it is not set already. + + The document type. + The type of the primary key. + The document. + + + + Deletes a document. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to delete. + The number of documents deleted. + + + + Asynchronously deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to delete. + The number of documents deleted. + + + + Deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a list of documents. + + The type representing a Document. + The type of the primary key for a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes a list of documents. + + The type representing a Document. + The type of the primary key for a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Returns the names of the indexes present on a collection. + + The type representing a Document. + The type of the primary key for a Document. + An optional partition key + A list containing the names of the indexes on on the concerned collection. + + + + Create a text index on the given field. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The type of the primary key for a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates an index on the given field in ascending order. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The type of the primary key for a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates an index on the given field in descending order. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The type of the primary key for a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates a hashed index on the given field. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The type of the primary key for a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates a combined text index. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The type of the primary key for a Document. + The fields we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Drops the index given a field name + + The type representing a Document. + The type of the primary key for a Document. + The name of the index + An optional partition key + + + + Asynchronously returns one document given its id. + + The type representing a Document. + The type of the primary key for a Document. + The Id of the document you want to get. + An optional partition key. + + + + Returns one document given its id. + + The type representing a Document. + The type of the primary key for a Document. + The Id of the document you want to get. + An optional partition key. + + + + Asynchronously returns one document given an expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns one document given an expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns a collection cursor. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns true if any of the document of the collection matches the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns true if any of the document of the collection matches the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Asynchronously returns a list of the documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns a list of the documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Asynchronously counts how many documents match the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partitionKey + + + + Counts how many documents match the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partitionKey + + + + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + The type of the primary key. + A LINQ expression filter. + A property selector to order by descending. + An optional partitionKey. + + + + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + The type of the primary key. + A LINQ expression filter. + A property selector to order by descending. + An optional partitionKey. + + + + Gets the document with the minimum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + The type of the primary key. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the document with the minimum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + The type of the primary key. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the maximum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the primary key. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the maximum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the primary key. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the minimum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the primary key. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partition key. + + + + Gets the minimum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the primary key. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partition key. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Groups a collection of documents given a grouping criteria, + and returns a dictionary of listed document groups with keys having the different values of the grouping criteria. + + The type representing a Document. + The type of the primary key for a Document. + The type of the grouping criteria. + The type of the projected group. + The grouping criteria. + The projected group result. + The partition key of your document, if any. + + + + 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. + + The type representing a Document. + The type of the primary key for a Document. + The type of the grouping criteria. + The type of the projected group. + A LINQ expression filter. + The grouping criteria. + The projected group result. + The partition key of your document, if any. + + + + Asynchronously returns a paginated list of the documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + The property selector. + Order of the sorting. + The number of documents you want to skip. Default value is 0. + The number of documents you want to take. Default value is 50. + An optional partition key. + + + + Asynchronously returns a paginated list of the documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + The sort definition. + The number of documents you want to skip. Default value is 0. + The number of documents you want to take. Default value is 50. + An optional partition key. + + + + Asynchronously returns a projected document matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Returns a projected document matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + The document filter. + The projection expression. + An optional partition key. + + + + Asynchronously Updates a document. + + The type representing a Document. + The type of the primary key for a Document. + The document with the modifications you want to persist. + + + + Updates a document. + + The type representing a Document. + The type of the primary key for a Document. + The document with the modifications you want to persist. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to modify. + The update definition for the document. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to modify. + The update definition for the document. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. + + + + Updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. + + + + The interface exposing data insertion functionality for Key typed repositories. + + + + + + Asynchronously adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The document you want to add. + + + + Adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The document you want to add. + + + + Asynchronously adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The documents you want to add. + + + + Adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The documents you want to add. + + + + 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. + + + 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. + + + 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. + + The type of the document Id. + + + + The MongoDb accessor to insert data. + + + + + Asynchronously adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The document you want to add. + + + + Adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The document you want to add. + + + + Asynchronously adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The documents you want to add. + + + + Adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The documents you want to add. + + + + The MongoDb accessor to delete data. + + + + + Deletes a document. + + The type representing a Document. + The document you want to delete. + The number of documents deleted. + + + + Asynchronously deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + The document you want to delete. + The number of documents deleted. + + + + Deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a list of documents. + + The type representing a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes a list of documents. + + The type representing a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + The MongoDb accessor to manage indexes. + + + + + Returns the names of the indexes present on a collection. + + The type representing a Document. + An optional partition key + A list containing the names of the indexes on on the concerned collection. + + + + Create a text index on the given field. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates an index on the given field in ascending order. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates an index on the given field in descending order. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates a hashed index on the given field. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates a combined text index. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The fields we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Drops the index given a field name + + The type representing a Document. + The name of the index + An optional partition key + + + + The constructor taking a connection string and a database name. + + The connection string of the MongoDb server. + The name of the database against which you want to perform operations. + + + + The contructor taking a . + + A mongodb context implementing + + + + The contructor taking a . + + A mongodb context implementing + + + + Gets a collections for a potentially partitioned document type. + + The document type. + The collection partition key. + + + + + Gets a collections for the type TDocument with a partition key. + + The document type. + The collection partition key. + + + + + Asynchronously Updates a document. + + The type representing a Document. + The document with the modifications you want to persist. + + + + Updates a document. + + The type representing a Document. + The document with the modifications you want to persist. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The document you want to modify. + The update definition for the document. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The document you want to modify. + The update definition for the document. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. + + + + The interface exposing deletion functionality for Key typed repositories. + + The type of the document Id. + + + + Deletes a document. + + The type representing a Document. + The document you want to delete. + The number of documents deleted. + + + + Asynchronously deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + The document you want to delete. + The number of documents deleted. + + + + Deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a list of documents. + + The type representing a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes a list of documents. + + The type representing a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + The interface exposing index management functionality for Key typed repositories. + + + + + + Returns the names of the indexes present on a collection. + + The type representing a Document. + An optional partition key + A list containing the names of the indexes on on the concerned collection. + + + + Create a text index on the given field. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates an index on the given field in ascending order. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates an index on the given field in descending order. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates a hashed index on the given field. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates a combined text index. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The fields we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Drops the index given a field name + + The type representing a Document. + The name of the index + An optional partition key + + + + The interface exposing all the CRUD and Index functionalities for Key typed repositories. + + The type of the document Id. + + + + 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. + + + + + The connection string. + + + + + The database name. + + + + + The MongoDbContext + + + + + A MongoDb Reader for read operations + + + + + The constructor taking a connection string and a database name. + + The connection string of the MongoDb server. + The name of the database against which you want to perform operations. + + + + The contructor taking a . + + A mongodb context implementing + + + + The contructor taking a . + + A mongodb context implementing + + + + Asynchronously returns one document given its id. + + The type representing a Document. + The Id of the document you want to get. + An optional partition key. + + + + Returns one document given its id. + + The type representing a Document. + The Id of the document you want to get. + An optional partition key. + + + + Asynchronously returns one document given an expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns one document given an expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns a collection cursor. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns true if any of the document of the collection matches the filter condition. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns true if any of the document of the collection matches the filter condition. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + + + + Asynchronously returns a list of the documents matching the filter condition. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns a list of the documents matching the filter condition. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + + + + Asynchronously counts how many documents match the filter condition. + + The type representing a Document. + A LINQ expression filter. + An optional partitionKey + + + + Counts how many documents match the filter condition. + + The type representing a Document. + A LINQ expression filter. + An optional partitionKey + + + + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + A LINQ expression filter. + A property selector to order by descending. + An optional partitionKey. + + + + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + A LINQ expression filter. + A property selector to order by descending. + An optional partitionKey. + + + + + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the maximum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the maximum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the minimum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partition key. + + + + Gets the minimum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partition key. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Asynchronously returns a projected document matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Returns a projected document matching the filter condition. + + The type representing a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Groups a collection of documents given a grouping criteria, + and returns a dictionary of listed document groups with keys having the different values of the grouping criteria. + + The type representing a Document. + The type of the grouping criteria. + The type of the projected group. + The grouping criteria. + The projected group result. + The partition key of your document, if any. + + + + 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. + + The type representing a Document. + The type of the grouping criteria. + The type of the projected group. + A LINQ expression filter. + The grouping criteria. + The projected group result. + The partition key of your document, if any. + + + + Asynchronously returns a paginated list of the documents matching the filter condition. + + The type representing a Document. + A LINQ expression filter. + The property selector. + Order of the sorting. + The number of documents you want to skip. Default value is 0. + The number of documents you want to take. Default value is 50. + An optional partition key. + + + + Asynchronously returns a paginated list of the documents matching the filter condition. + + The type representing a Document. + A LINQ expression filter. + The sort definition. + The number of documents you want to skip. Default value is 0. + The number of documents you want to take. Default value is 50. + An optional partition key. + + + + Asynchronously Updates a document. + + The type representing a Document. + The document with the modifications you want to persist. + + + + Updates a document. + + The type representing a Document. + The document with the modifications you want to persist. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The document you want to modify. + The update definition for the document. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The document you want to modify. + The update definition for the document. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. @@ -1960,29 +3471,17 @@ - The IMongoClient from the official MongoDb driver + The IMongoClient from the official MongoDB driver - The IMongoDatabase from the official Mongodb driver - - - - - Sets the Guid representation of the MongoDb Driver. - - The new value of the GuidRepresentation - - - - Initialize the Guid representation of the MongoDb Driver. - Override this method to change the default GuidRepresentation. + The IMongoDatabase from the official MongoDB driver - The constructor of the MongoDbContext, it needs a an object implementing . + The constructor of the MongoDbContext, it needs an object implementing . An object implementing IMongoDatabase @@ -1993,12 +3492,12 @@ The connections string. The name of your database. - + - Extracts the CollectionName attribute from the entity type, if any. + The constructor of the MongoDbContext, it needs a connection string and a database name. - The type representing a Document. - The name of the collection in which the TDocument is stored. + The MongoClient. + The name of your database. @@ -2013,9 +3512,28 @@ The type representing a Document. + + + Sets the Guid representation of the MongoDB Driver. + + The new value of the GuidRepresentation + + + + Extracts the CollectionName attribute from the entity type, if any. + + The type representing a Document. + The name of the collection in which the TDocument is stored. + + + + Initialize the Guid representation of the MongoDB Driver. + Override this method to change the default GuidRepresentation. + + - Given the docmuent type and the partition key, returns the name of the collection it belongs to. + Given the document type and the partition key, returns the name of the collection it belongs to. The type representing a Document. The value of the partition key. @@ -2030,22 +3548,8 @@ - The ReadOnlyMongoRepository implements the readonly functionality of the IReadOnlyMongoRepository. - - - - - The connection string. - - - - - The database name. - - - - - The MongoDbContext + 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. @@ -2067,131 +3571,6 @@ A mongodb context implementing - - - Asynchronously returns one document given its id. - - The type representing a Document. - The Id of the document you want to get. - An optional partition key. - - - - Returns one document given its id. - - The type representing a Document. - The Id of the document you want to get. - An optional partition key. - - - - Asynchronously returns one document given an expression filter. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - - - - Returns one document given an expression filter. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - - - - Returns a collection cursor. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - - - - Returns true if any of the document of the collection matches the filter condition. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - - - - Returns true if any of the document of the collection matches the filter condition. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - - - - Asynchronously returns a list of the documents matching the filter condition. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - - - - Returns a list of the documents matching the filter condition. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - - - - Asynchronously counts how many documents match the filter condition. - - The type representing a Document. - A LINQ expression filter. - An optional partitionKey - - - - Counts how many documents match the filter condition. - - The type representing a Document. - A LINQ expression filter. - An optional partitionKey - - - - Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. - - The document type. - A LINQ expression filter. - A property selector to order by descending. - An optional partitionKey. - - - - Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. - - The document type. - A LINQ expression filter. - A property selector to order by descending. - An optional partitionKey. - - - - - Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. - - The document type. - A LINQ expression filter. - A property selector to order by ascending. - An optional partitionKey. - - - - Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. - - The document type. - A LINQ expression filter. - A property selector to order by ascending. - An optional partitionKey. - Asynchronously returns one document given its id. @@ -2331,56 +3710,15 @@ A property selector to order by ascending. An optional partitionKey. - - - Gets the minimum value of a property in a mongodb collections that is satisfying the filter. - - The document type. - The type of the primary key. - The type of the value used to order the query. - A LINQ expression filter. - A property selector to order by ascending. - An optional partition key. - - - - Gets the minimum value of a property in a mongodb collections that is satisfying the filter. - - The document type. - The type of the primary key. - The type of the value used to order the query. - A LINQ expression filter. - A property selector to order by descending. - An optional partition key. - - - - Gets the maximum value of a property in a mongodb collections that is satisfying the filter. - - The document type. - The type of the value used to order the query. - A LINQ expression filter. - A property selector to order by ascending. - An optional partitionKey. - Gets the maximum value of a property in a mongodb collections that is satisfying the filter. The document type. The type of the primary key. - A LINQ expression filter. - A property selector to order by ascending. - An optional partitionKey. - - - - Gets the maximum value of a property in a mongodb collections that is satisfying the filter. - - The document type. The type of the value used to order the query. A LINQ expression filter. - A property selector to order by ascending. + A property selector to select the max value. An optional partitionKey. @@ -2394,16 +3732,6 @@ A property selector to order by ascending. An optional partitionKey. - - - Gets the minimum value of a property in a mongodb collections that is satisfying the filter. - - The document type. - The type of the value used to order the query. - A LINQ expression filter. - A property selector to order by ascending. - An optional partition key. - Gets the minimum value of a property in a mongodb collections that is satisfying the filter. @@ -2415,16 +3743,6 @@ A property selector to order by ascending. An optional partition key. - - - Gets the minimum value of a property in a mongodb collections that is satisfying the filter. - - The document type. - The type of the value used to order the query. - A LINQ expression filter. - A property selector to order by ascending. - An optional partition key. - Gets the minimum value of a property in a mongodb collections that is satisfying the filter. @@ -2436,21 +3754,141 @@ A property selector to order by ascending. An optional partition key. - + - Gets a collections for the type TDocument with the matching partition key (if any). + Sums the values of a selected field for a given filtered collection of documents. - The document type. - An optional partition key. - An + The type representing a Document. + The type of the primary key. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. - + - Gets a collections for the type TDocument + Sums the values of a selected field for a given filtered collection of documents. - The document type. - The document. - + The type representing a Document. + The type of the primary key. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + The type of the primary key. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + The type of the primary key. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Asynchronously returns a projected document matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Returns a projected document matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + The document filter. + The projection expression. + An optional partition key. + + + + 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. + + The type representing a Document. + The type of the primary key for a Document. + The type of the grouping criteria. + The type of the projected group. + The grouping criteria. + The projected group result. + The partition key of your document, if any. + + + + 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. + + The type representing a Document. + The type of the primary key for a Document. + The type of the grouping criteria. + The type of the projected group. + A LINQ expression filter. + The grouping criteria. + The projected group result. + The partition key of your document, if any. + + + + Asynchronously returns a paginated list of the documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + The property selector. + Order of the sorting. + The number of documents you want to skip. Default value is 0. + The number of documents you want to take. Default value is 50. + An optional partition key. + + + + Asynchronously returns a paginated list of the documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + The sort definition. + The number of documents you want to skip. Default value is 0. + The number of documents you want to take. Default value is 50. + An optional partition key. @@ -2461,23 +3899,6 @@ The document. - - - Gets a collections for a potentially partitioned document type. - - The document type. - The collection partition key. - - - - - Gets a collections for the type TDocument with a partition key. - - The document type. - The type of the primary key. - The collection partition key. - - Gets a collections for a potentially partitioned document type. @@ -2487,13 +3908,22 @@ The collection partition key. - + - Converts a LINQ expression of TDocument, TValue to a LINQ expression of TDocument, object + Gets a collections for a potentially partitioned document type. The document type. - The type of the value. - The expression to convert + The document. + + + + + Gets a collections for the type TDocument with a partition key. + + The document type. + The type of the primary key. + The collection partition key. + diff --git a/MongoDbGenericRepository/lib/netstandard2.0/MongoDbGenericRepository.deps.json b/MongoDbGenericRepository/lib/netstandard2.0/MongoDbGenericRepository.deps.json index 1328c4a..332b98c 100644 --- a/MongoDbGenericRepository/lib/netstandard2.0/MongoDbGenericRepository.deps.json +++ b/MongoDbGenericRepository/lib/netstandard2.0/MongoDbGenericRepository.deps.json @@ -36,7 +36,10 @@ "System.Threading": "4.3.0" }, "runtime": { - "lib/netstandard1.3/DnsClient.dll": {} + "lib/netstandard1.3/DnsClient.dll": { + "assemblyVersion": "1.0.7.0", + "fileVersion": "1.0.7.0" + } } }, "Microsoft.NETCore.Platforms/1.1.0": {}, @@ -69,7 +72,10 @@ "System.Reflection.Emit.Lightweight": "4.0.1" }, "runtime": { - "lib/netstandard1.5/MongoDB.Bson.dll": {} + "lib/netstandard1.5/MongoDB.Bson.dll": { + "assemblyVersion": "2.7.0.0", + "fileVersion": "2.7.0.0" + } } }, "MongoDB.Driver/2.7.0": { @@ -81,7 +87,10 @@ "System.Linq.Queryable": "4.0.1" }, "runtime": { - "lib/netstandard1.5/MongoDB.Driver.dll": {} + "lib/netstandard1.5/MongoDB.Driver.dll": { + "assemblyVersion": "2.7.0.0", + "fileVersion": "2.7.0.0" + } } }, "MongoDB.Driver.Core/2.7.0": { @@ -96,7 +105,10 @@ "System.Security.SecureString": "4.0.0" }, "runtime": { - "lib/netstandard1.5/MongoDB.Driver.Core.dll": {} + "lib/netstandard1.5/MongoDB.Driver.Core.dll": { + "assemblyVersion": "2.7.0.0", + "fileVersion": "2.7.0.0" + } } }, "NETStandard.Library/2.0.3": { @@ -137,7 +149,10 @@ "System.Threading": "4.3.0" }, "runtime": { - "lib/netstandard1.1/System.Buffers.dll": {} + "lib/netstandard1.1/System.Buffers.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.6.24705.1" + } } }, "System.Collections/4.3.0": { @@ -161,7 +176,10 @@ "System.Threading.Tasks": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.Collections.Concurrent.dll": {} + "lib/netstandard1.3/System.Collections.Concurrent.dll": { + "assemblyVersion": "4.0.13.0", + "fileVersion": "4.6.24705.1" + } } }, "System.Collections.NonGeneric/4.0.1": { @@ -174,7 +192,10 @@ "System.Threading": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.Collections.NonGeneric.dll": {} + "lib/netstandard1.3/System.Collections.NonGeneric.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "1.0.24212.1" + } } }, "System.Collections.Specialized/4.0.1": { @@ -188,7 +209,10 @@ "System.Threading": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.Collections.Specialized.dll": {} + "lib/netstandard1.3/System.Collections.Specialized.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "1.0.24212.1" + } } }, "System.ComponentModel/4.0.1": { @@ -196,7 +220,10 @@ "System.Runtime": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.ComponentModel.dll": {} + "lib/netstandard1.3/System.ComponentModel.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "1.0.24212.1" + } } }, "System.ComponentModel.Primitives/4.1.0": { @@ -206,7 +233,10 @@ "System.Runtime": "4.3.0" }, "runtime": { - "lib/netstandard1.0/System.ComponentModel.Primitives.dll": {} + "lib/netstandard1.0/System.ComponentModel.Primitives.dll": { + "assemblyVersion": "4.1.0.0", + "fileVersion": "1.0.24212.1" + } } }, "System.ComponentModel.TypeConverter/4.1.0": { @@ -228,7 +258,10 @@ "System.Threading": "4.3.0" }, "runtime": { - "lib/netstandard1.5/System.ComponentModel.TypeConverter.dll": {} + "lib/netstandard1.5/System.ComponentModel.TypeConverter.dll": { + "assemblyVersion": "4.1.0.0", + "fileVersion": "1.0.24212.1" + } } }, "System.Diagnostics.Debug/4.3.0": { @@ -302,7 +335,10 @@ "System.Threading": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.Dynamic.Runtime.dll": {} + "lib/netstandard1.3/System.Dynamic.Runtime.dll": { + "assemblyVersion": "4.0.11.0", + "fileVersion": "1.0.24212.1" + } } }, "System.Globalization/4.3.0": { @@ -356,7 +392,10 @@ "System.Runtime": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.IO.FileSystem.Primitives.dll": {} + "lib/netstandard1.3/System.IO.FileSystem.Primitives.dll": { + "assemblyVersion": "4.0.2.0", + "fileVersion": "4.6.24705.1" + } } }, "System.Linq/4.3.0": { @@ -368,7 +407,10 @@ "System.Runtime.Extensions": "4.3.0" }, "runtime": { - "lib/netstandard1.6/System.Linq.dll": {} + "lib/netstandard1.6/System.Linq.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.24705.1" + } } }, "System.Linq.Expressions/4.1.0": { @@ -392,7 +434,10 @@ "System.Threading": "4.3.0" }, "runtime": { - "lib/netstandard1.6/System.Linq.Expressions.dll": {} + "lib/netstandard1.6/System.Linq.Expressions.dll": { + "assemblyVersion": "4.1.0.0", + "fileVersion": "1.0.24212.1" + } } }, "System.Linq.Queryable/4.0.1": { @@ -407,7 +452,10 @@ "System.Runtime": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.Linq.Queryable.dll": {} + "lib/netstandard1.3/System.Linq.Queryable.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "1.0.24212.1" + } } }, "System.Net.NameResolution/4.3.0": { @@ -514,7 +562,10 @@ "System.Threading": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.ObjectModel.dll": {} + "lib/netstandard1.3/System.ObjectModel.dll": { + "assemblyVersion": "4.0.12.0", + "fileVersion": "1.0.24212.1" + } } }, "System.Reflection/4.3.0": { @@ -535,7 +586,10 @@ "System.Runtime": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.Reflection.Emit.dll": {} + "lib/netstandard1.3/System.Reflection.Emit.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "1.0.24212.1" + } } }, "System.Reflection.Emit.ILGeneration/4.0.1": { @@ -545,7 +599,10 @@ "System.Runtime": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.Reflection.Emit.ILGeneration.dll": {} + "lib/netstandard1.3/System.Reflection.Emit.ILGeneration.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "1.0.24212.1" + } } }, "System.Reflection.Emit.Lightweight/4.0.1": { @@ -556,7 +613,10 @@ "System.Runtime": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.Reflection.Emit.Lightweight.dll": {} + "lib/netstandard1.3/System.Reflection.Emit.Lightweight.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "1.0.24212.1" + } } }, "System.Reflection.Extensions/4.3.0": { @@ -580,7 +640,10 @@ "System.Runtime": "4.3.0" }, "runtime": { - "lib/netstandard1.5/System.Reflection.TypeExtensions.dll": {} + "lib/netstandard1.5/System.Reflection.TypeExtensions.dll": { + "assemblyVersion": "4.1.0.0", + "fileVersion": "1.0.24212.1" + } } }, "System.Resources.ResourceManager/4.3.0": { @@ -633,7 +696,10 @@ "runtime.native.System": "4.3.0" }, "runtime": { - "lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll": {} + "lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.6.24705.1" + } } }, "System.Runtime.Numerics/4.0.1": { @@ -644,7 +710,10 @@ "System.Runtime.Extensions": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.Runtime.Numerics.dll": {} + "lib/netstandard1.3/System.Runtime.Numerics.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "1.0.24212.1" + } } }, "System.Security.Claims/4.3.0": { @@ -658,7 +727,10 @@ "System.Security.Principal": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.Security.Claims.dll": {} + "lib/netstandard1.3/System.Security.Claims.dll": { + "assemblyVersion": "4.0.2.0", + "fileVersion": "4.6.24705.1" + } } }, "System.Security.Cryptography.Algorithms/4.2.0": { @@ -743,7 +815,10 @@ "runtime.native.System.Security.Cryptography": "4.0.0" }, "runtime": { - "lib/netstandard1.6/System.Security.Cryptography.OpenSsl.dll": {} + "lib/netstandard1.6/System.Security.Cryptography.OpenSsl.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "1.0.24212.1" + } } }, "System.Security.Cryptography.Primitives/4.0.0": { @@ -757,7 +832,10 @@ "System.Threading.Tasks": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.Security.Cryptography.Primitives.dll": {} + "lib/netstandard1.3/System.Security.Cryptography.Primitives.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "1.0.24212.1" + } } }, "System.Security.Cryptography.X509Certificates/4.1.0": { @@ -794,7 +872,10 @@ "System.Runtime": "4.3.0" }, "runtime": { - "lib/netstandard1.0/System.Security.Principal.dll": {} + "lib/netstandard1.0/System.Security.Principal.dll": { + "assemblyVersion": "4.0.2.0", + "fileVersion": "4.6.24705.1" + } } }, "System.Security.Principal.Windows/4.3.0": { @@ -848,7 +929,10 @@ "System.Threading.Tasks": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.Threading.dll": {} + "lib/netstandard1.3/System.Threading.dll": { + "assemblyVersion": "4.0.12.0", + "fileVersion": "4.6.24705.1" + } } }, "System.Threading.Overlapped/4.3.0": { @@ -871,7 +955,10 @@ "System.Runtime": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.Threading.Thread.dll": {} + "lib/netstandard1.3/System.Threading.Thread.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.6.24705.1" + } } }, "System.Threading.ThreadPool/4.3.0": { @@ -880,7 +967,10 @@ "System.Runtime.Handles": "4.3.0" }, "runtime": { - "lib/netstandard1.3/System.Threading.ThreadPool.dll": {} + "lib/netstandard1.3/System.Threading.ThreadPool.dll": { + "assemblyVersion": "4.0.11.0", + "fileVersion": "4.6.24705.1" + } } } } @@ -922,7 +1012,7 @@ "Microsoft.Win32.Registry/4.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-q+eLtROUAQ3OxYA5mpQrgyFgzLQxIyrfT2eLpYX5IEPlHmIio2nh4F5bgOaQoGOV865kFKZZso9Oq9RlazvXtg==", + "sha512": "sha512-mYUxH/YY9PwvuWY93/qsovFHAh+Lu2CNxNHWxB/x0dnpaEy6oIy/9d7R2J6dFaLZ7jhE7emLjn7A8kSzsP1A+Q==", "path": "microsoft.win32.registry/4.0.0", "hashPath": "microsoft.win32.registry.4.0.0.nupkg.sha512" }, @@ -971,7 +1061,7 @@ "runtime.native.System.Net.Security/4.0.1": { "type": "package", "serviceable": true, - "sha512": "sha512-Az6Ff6rZFb8nYGAaejFR6jr8ktt9f3e1Q/yKdw0pwHNTLaO/1eCAC9vzBoR9YAb0QeZD6fZXl1A9tRB5stpzXA==", + "sha512": "sha512-OpQmF7Ol4t3BVl+x2SURhymksME8f9Ke4uKWAVKPZhGZn6g5bBKvaSllV4nmNKgNQSIhM1x4IOtgc6/32H1OUg==", "path": "runtime.native.system.net.security/4.0.1", "hashPath": "runtime.native.system.net.security.4.0.1.nupkg.sha512" }, @@ -1027,14 +1117,14 @@ "System.ComponentModel.Primitives/4.1.0": { "type": "package", "serviceable": true, - "sha512": "sha512-sc/7eVCdxPrp3ljpgTKVaQGUXiW05phNWvtv/m2kocXqrUQvTVWKou1Edas2aDjTThLPZOxPYIGNb/HN0QjURg==", + "sha512": "sha512-mAaj8PXxM7hUSIJYm9chhSe90HaIVyl8vb4JJO0M7fRaeBqSaaveHdRAmOL0LcOxp7kf9Vb8HujCe02DUqG5HQ==", "path": "system.componentmodel.primitives/4.1.0", "hashPath": "system.componentmodel.primitives.4.1.0.nupkg.sha512" }, "System.ComponentModel.TypeConverter/4.1.0": { "type": "package", "serviceable": true, - "sha512": "sha512-MnDAlaeJZy9pdB5ZdOlwdxfpI+LJQ6e0hmH7d2+y2LkiD8DRJynyDYl4Xxf3fWFm7SbEwBZh4elcfzONQLOoQw==", + "sha512": "sha512-jcj79VC96yxc/rgLB59+g4675iVts1XrfC97dniMEvmJhRl8cG7qRO3EsJQwNw8cFL6RenFxn/CGfUhgj32SdQ==", "path": "system.componentmodel.typeconverter/4.1.0", "hashPath": "system.componentmodel.typeconverter.4.1.0.nupkg.sha512" }, @@ -1048,14 +1138,14 @@ "System.Diagnostics.Process/4.1.0": { "type": "package", "serviceable": true, - "sha512": "sha512-mpVZ5bnlSs3tTeJ6jYyDJEIa6tavhAd88lxq1zbYhkkCu0Pno2+gHXcvZcoygq2d8JxW3gojXqNJMTAshduqZA==", + "sha512": "sha512-4dlFhzwmI3hl32P+8c9hnytYtV7Xldhsokm5i7Fvv5PmTS68TQCfsuJrREIyF9N1B8zlsSomp7AVrXLe45kKFQ==", "path": "system.diagnostics.process/4.1.0", "hashPath": "system.diagnostics.process.4.1.0.nupkg.sha512" }, "System.Diagnostics.TraceSource/4.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-6WVCczFZKXwpWpzd/iJkYnsmWTSFFiU24Xx/YdHXBcu+nFI/ehTgeqdJQFbtRPzbrO3KtRNjvkhtj4t5/WwWsA==", + "sha512": "sha512-bGUeY5wiCHYSWbYZS3QjbaQ1hNoJ1RQBQMB3E0Cgh6AH//4rXfXIOHKIW46HDOsTEDoNfvFNDXphL5W5B/XMwQ==", "path": "system.diagnostics.tracesource/4.0.0", "hashPath": "system.diagnostics.tracesource.4.0.0.nupkg.sha512" }, @@ -1146,7 +1236,7 @@ "System.Net.NetworkInformation/4.3.0": { "type": "package", "serviceable": true, - "sha512": "sha512-zNVmWVry0pAu7lcrRBhwwU96WUdbsrGL3azyzsbXmVNptae1+Za+UgOe9Z6s8iaWhPn7/l4wQqhC56HZWq7tkg==", + "sha512": "sha512-MKLDZXuBZOS348egaxkMgwSUHIIhykVf0pudpfSdzjKmkRpVCzqkpysPHHp8HfckYAhuXRM+UgxWPgFTHF8Trg==", "path": "system.net.networkinformation/4.3.0", "hashPath": "system.net.networkinformation.4.3.0.nupkg.sha512" }, @@ -1160,7 +1250,7 @@ "System.Net.Security/4.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-uM1JaYJciCc2w7efD6du0EpQ1n5ZQqE6/P43/aI4H5E59qvP+wt3l70KIUF/Ha7NaeXGoGNFPVO0MB80pVHk2g==", + "sha512": "sha512-iavC4j5XrRyX3aXbn23jHHF0NTxw9F+2vi3a94VY4BgfrYm5VQBh8OzU1TkNahTSlcKzjGhEc7ZfTfe4b62J6Q==", "path": "system.net.security/4.0.0", "hashPath": "system.net.security.4.0.0.nupkg.sha512" }, @@ -1349,7 +1439,7 @@ "System.Security.SecureString/4.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-sqzq9GD6/b0yqPuMpgIKBuoLf4VKAj8oAfh4kXSzPaN6eoKY3hRi9C5L27uip25qlU+BGPfb0xh2Rmbwc4jFVA==", + "sha512": "sha512-7TGOnj9Lr8ljCJbMHjZC34hEw3Z+zRPp7eNhLBg22mbSqO8gQMGLJ/vQkWv8HFYG0t2i53ZulKZ8NNho+jVK7Q==", "path": "system.security.securestring/4.0.0", "hashPath": "system.security.securestring.4.0.0.nupkg.sha512" }, @@ -1377,7 +1467,7 @@ "System.Threading.Overlapped/4.3.0": { "type": "package", "serviceable": true, - "sha512": "sha512-m3HQ2dPiX/DSTpf+yJt8B0c+SRvzfqAJKx+QDWi+VLhz8svLT23MVjEOHPF/KiSLeArKU/iHescrbLd3yVgyNg==", + "sha512": "sha512-JpukcZA7kre2gQ7GrhtvZu1xv/LVEG5HV9AajQ3XV7l36T6ICalw/llfkBHeK/eqo8UWpMNqkWGCzzlSuqE6pg==", "path": "system.threading.overlapped/4.3.0", "hashPath": "system.threading.overlapped.4.3.0.nupkg.sha512" }, diff --git a/MongoDbGenericRepository/lib/netstandard2.0/MongoDbGenericRepository.dll b/MongoDbGenericRepository/lib/netstandard2.0/MongoDbGenericRepository.dll index 013622089b9ca7c204e402593f1fd44f1228010b..b7e76fc33283eac3702138d83508bd2798ca78d9 100644 GIT binary patch literal 154112 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 literal 99328 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 - The IBaseMongoRepository exposes the CRUD functionality of the BaseMongoRepository. + The IBaseMongoRepository interface exposes the CRUD functionality of the BaseMongoRepository. - - - Asynchronously adds a document to the collection. - - The type representing a Document. - The document you want to add. - - - - Adds a document to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The document you want to add. - - - - Asynchronously adds a list of documents to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The document you want to add. - - - - Adds a list of documents to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The document you want to add. - - - - Asynchronously adds a document to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to add. - - - - Adds a document to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to add. - - - - Asynchronously adds a list of documents to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The type of the primary key for a Document. - The documents you want to add. - - - - Adds a list of documents to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The type of the primary key for a Document. - The documents you want to add. - - - - Asynchronously Updates a document. - - The type representing a Document. - The document with the modifications you want to persist. - - - - Updates a document. - - The type representing a Document. - The document with the modifications you want to persist. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - For the entity selected by the filter, updates the property field with the given value. - - The type representing a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The partition key for the document. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The document you want to modify. - The update definition for the document. - - - - For the entity selected by the filter, updates the property field with the given value. - - The type representing a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The partition key for the document. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The document you want to modify. - The update definition for the document. - - - - Asynchronously Updates a document. - - The type representing a Document. - The type of the primary key for a Document. - The document with the modifications you want to persist. - - - - Updates a document. - - The type representing a Document. - The type of the primary key for a Document. - The document with the modifications you want to persist. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to modify. - The update definition for the document. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to modify. - The update definition for the document. - - - - For the entity selected by the filter, updates the property field with the given value.. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The partition key for the document. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - For the entity selected by the filter, updates the property field with the given value. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The partition key for the document. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - Asynchronously deletes a document. - - The type representing a Document. - The document you want to delete. - The number of documents deleted. - - - - Asynchronously deletes a document matching the condition of the LINQ expression filter. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Deletes a document. - - The type representing a Document. - The document you want to delete. - The number of documents deleted. - - - - Deletes a document matching the condition of the LINQ expression filter. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously deletes the documents matching the condition of the LINQ expression filter. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously deletes a list of documents. - - The type representing a Document. - The list of documents to delete. - The number of documents deleted. - - - - Deletes a list of documents. - - The type representing a Document. - The list of documents to delete. - The number of documents deleted. - - - - Deletes the documents matching the condition of the LINQ expression filter. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Deletes a document. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to delete. - The number of documents deleted. - - - - Asynchronously deletes a document matching the condition of the LINQ expression filter. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to delete. - The number of documents deleted. - - - - Deletes a document matching the condition of the LINQ expression filter. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously deletes a document matching the condition of the LINQ expression filter. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously deletes the documents matching the condition of the LINQ expression filter. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously deletes a list of documents. - - The type representing a Document. - The type of the primary key for a Document. - The list of documents to delete. - The number of documents deleted. - - - - Deletes a list of documents. - - The type representing a Document. - The type of the primary key for a Document. - The list of documents to delete. - The number of documents deleted. - - - - Deletes the documents matching the condition of the LINQ expression filter. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously returns a projected document matching the filter condition. - - The type representing a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Asynchronously returns a projected document matching the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Returns a projected document matching the filter condition. - - The type representing a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Returns a projected document matching the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Asynchronously returns a list of projected documents matching the filter condition. - - The type representing a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Asynchronously returns a list of projected documents matching the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Asynchronously returns a list of projected documents matching the filter condition. - - The type representing a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Asynchronously returns a list of projected documents matching the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - Asynchronously returns a paginated list of the documents matching the filter condition. @@ -544,19 +51,289 @@ - + - Groups a collection of documents given a grouping criteria, - and returns a list of projected documents. + The IBaseReadOnlyRepository exposes the generic Read Only functionality of the BaseMongoRepository. + + + + + The connection string. + + + + + The database name. + + + + + Asynchronously returns one document given its id. The type representing a Document. - The type of the grouping criteria. - The type of the projected group. - The grouping criteria. - The projected group result. + The type of the primary key for a Document. + The Id of the document you want to get. + An optional partition key. + + + + Returns one document given its id. + + The type representing a Document. + The type of the primary key for a Document. + The Id of the document you want to get. + An optional partition key. + + + + Asynchronously returns one document given an expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns one document given an expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns a collection cursor. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns true if any of the document of the collection matches the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns true if any of the document of the collection matches the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Asynchronously returns a list of the documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns a list of the documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Asynchronously counts how many documents match the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partitionKey + + + + Counts how many documents match the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partitionKey + + + + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + The type of the primary key. + A LINQ expression filter. + A property selector to order by descending. + An optional partitionKey. + + + + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + The type of the primary key. + A LINQ expression filter. + A property selector to order by descending. + An optional partitionKey. + + + + Gets the document with the minimum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + The type of the primary key. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the document with the minimum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + The type of the primary key. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the maximum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the primary key. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the maximum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the primary key. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the minimum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the primary key. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partition key. + + + + Gets the minimum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the primary key. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partition key. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + The type of the primary key. + A LINQ expression filter. + The field you want to sum. The partition key of your document, if any. - + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + The type of the primary key. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + The type of the primary key. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + The type of the primary key. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Asynchronously returns a projected document matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + + The projection expression. + An optional partition key. + + + + Returns a projected document matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + + The projection expression. + An optional partition key. + + 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. @@ -564,174 +341,49 @@ The type representing a Document. The type of the grouping criteria. The type of the projected group. - - The grouping criteria. - The projected group result. + The type of the primary key. + The grouping criteria. + The projected group result. The partition key of your document, if any. - + - The repository interface for managing indexes - - - - - Create a text index on the given field. - IndexCreationOptions can be supplied to further specify - how the creation should be done. + 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. The type representing a Document. - The field we want to index. - Options for creating an index. - An optional partition key. - The result of the create index operation. + The type of the grouping criteria. + The type of the projected group. + The type of the primary key. + A LINQ expression filter. + The grouping criteria. + The projected group result. + The partition key of your document, if any. - + - Create a text index on the given field. - IndexCreationOptions can be supplied to further specify - how the creation should be done. + Asynchronously returns a paginated list of the documents matching the filter condition. The type representing a Document. The type of the primary key for a Document. - The field we want to index. - Options for creating an index. + A LINQ expression filter. + The property selector. + Order of the sorting. + The number of documents you want to skip. Default value is 0. + The number of documents you want to take. Default value is 50. An optional partition key. - The result of the create index operation. - + - Creates an index on the given field in ascending order. - IndexCreationOptions can be supplied to further specify - how the creation should be done. - - The type representing a Document. - The field we want to index. - Options for creating an index. - An optional partition key. - The result of the create index operation. - - - - Creates an index on the given field in ascending order. - IndexCreationOptions can be supplied to further specify - how the creation should be done. + Asynchronously returns a paginated list of the documents matching the filter condition. The type representing a Document. The type of the primary key for a Document. - The field we want to index. - Options for creating an index. + A LINQ expression filter. + The sort definition. + The number of documents you want to skip. Default value is 0. + The number of documents you want to take. Default value is 50. An optional partition key. - The result of the create index operation. - - - - Creates an index on the given field in descending order. - IndexCreationOptions can be supplied to further specify - how the creation should be done. - - The type representing a Document. - The field we want to index. - Options for creating an index. - An optional partition key. - A string containing the result of the operation. - - - - Creates an index on the given field in descending order. - IndexCreationOptions can be supplied to further specify - how the creation should be done. - - The type representing a Document. - The type of the primary key for a Document. - The field we want to index. - Options for creating an index. - An optional partition key. - The result of the create index operation. - - - - Creates a hashed index on the given field. - IndexCreationOptions can be supplied to further specify - how the creation should be done. - - The type representing a Document. - The field we want to index. - Options for creating an index. - An optional partition key. - A string containing the result of the operation. - - - - Creates a hashed index on the given field. - IndexCreationOptions can be supplied to further specify - how the creation should be done. - - The type representing a Document. - The type of the primary key for a Document. - The field we want to index. - Options for creating an index. - An optional partition key. - The result of the create index operation. - - - - Creates a combined text index. - IndexCreationOptions can be supplied to further specify - how the creation should be done. - - The type representing a Document. - The fields we want to index. - Options for creating an index. - An optional partition key. - The result of the create index operation. - - - - Creates a combined text index. - IndexCreationOptions can be supplied to further specify - how the creation should be done. - - The type representing a Document. - The type of the primary key for a Document. - The fields we want to index. - Options for creating an index. - An optional partition key. - The result of the create index operation. - - - - Drops the index given a field name - - The type representing a Document. - The name of the index - An optional partition key - - - - Drops the index given a field name - - The type representing a Document. - The type of the primary key for a Document. - The name of the index - An optional partition key - - - - Returns the names of the indexes present on a collection. - - The type representing a Document. - An optional partition key - A list containing the names of the indexes on on the concerned collection. - - - - Returns the names of the indexes present on a collection. - - The type representing a Document. - The type of the primary key for a Document. - An optional partition key - A list containing the names of the indexes on on the concerned collection. @@ -772,17 +424,7 @@ The IReadOnlyMongoRepository exposes the readonly functionality of the BaseMongoRepository. - - - The connection string. - - - - - The database name. - - - + Asynchronously returns one document given its id. @@ -790,7 +432,7 @@ The Id of the document you want to get. An optional partition key. - + Returns one document given its id. @@ -798,7 +440,7 @@ The Id of the document you want to get. An optional partition key. - + Asynchronously returns one document given an expression filter. @@ -806,7 +448,7 @@ A LINQ expression filter. An optional partition key. - + Returns one document given an expression filter. @@ -814,7 +456,7 @@ A LINQ expression filter. An optional partition key. - + Returns a collection cursor. @@ -822,7 +464,7 @@ A LINQ expression filter. An optional partition key. - + Asynchronously returns true if any of the document of the collection matches the filter condition. @@ -830,7 +472,7 @@ A LINQ expression filter. An optional partition key. - + Returns true if any of the document of the collection matches the filter condition. @@ -838,7 +480,7 @@ A LINQ expression filter. An optional partition key. - + Asynchronously returns a list of the documents matching the filter condition. @@ -846,7 +488,7 @@ A LINQ expression filter. An optional partition key. - + Returns a list of the documents matching the filter condition. @@ -854,7 +496,7 @@ A LINQ expression filter. An optional partition key. - + Asynchronously counts how many documents match the filter condition. @@ -862,7 +504,7 @@ A LINQ expression filter. An optional partition key. - + Counts how many documents match the filter condition. @@ -870,106 +512,7 @@ A LINQ expression filter. An optional partition key. - - - Asynchronously returns one document given its id. - - The type representing a Document. - The type of the primary key for a Document. - The Id of the document you want to get. - An optional partition key. - - - - Returns one document given its id. - - The type representing a Document. - The type of the primary key for a Document. - The Id of the document you want to get. - An optional partition key. - - - - Asynchronously returns one document given an expression filter. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - - - - Returns one document given an expression filter. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - - - - Returns a collection cursor. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - - - - Returns true if any of the document of the collection matches the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - - - - Returns true if any of the document of the collection matches the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - - - - Asynchronously returns a list of the documents matching the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - - - - Returns a list of the documents matching the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - - - - Asynchronously counts how many documents match the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partitionKey - - - - Counts how many documents match the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partitionKey - - + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. @@ -978,7 +521,7 @@ A property selector to order by descending. An optional partitionKey. - + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. @@ -988,7 +531,7 @@ An optional partitionKey. - + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. @@ -997,7 +540,7 @@ A property selector to order by ascending. An optional partitionKey. - + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. @@ -1006,47 +549,7 @@ A property selector to order by ascending. An optional partitionKey. - - - Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. - - The document type. - The type of the primary key. - A LINQ expression filter. - A property selector to order by descending. - An optional partitionKey. - - - - Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. - - The document type. - The type of the primary key. - A LINQ expression filter. - A property selector to order by descending. - An optional partitionKey. - - - - Gets the document with the minimum value of a specified property in a MongoDB collections that is satisfying the filter. - - The document type. - The type of the primary key. - A LINQ expression filter. - A property selector to order by ascending. - An optional partitionKey. - - - - Gets the document with the minimum value of a specified property in a MongoDB collections that is satisfying the filter. - - The document type. - The type of the primary key. - A LINQ expression filter. - A property selector to order by ascending. - An optional partitionKey. - - + Gets the maximum value of a property in a mongodb collections that is satisfying the filter. @@ -1056,17 +559,7 @@ A property selector to order by ascending. An optional partitionKey. - - - Gets the maximum value of a property in a mongodb collections that is satisfying the filter. - - The document type. - The type of the primary key. - A LINQ expression filter. - A property selector to order by ascending. - An optional partitionKey. - - + Gets the maximum value of a property in a mongodb collections that is satisfying the filter. @@ -1076,17 +569,7 @@ A property selector to order by ascending. An optional partitionKey. - - - Gets the maximum value of a property in a mongodb collections that is satisfying the filter. - - The document type. - The type of the primary key. - A LINQ expression filter. - A property selector to order by ascending. - An optional partitionKey. - - + Gets the minimum value of a property in a mongodb collections that is satisfying the filter. @@ -1096,18 +579,7 @@ A property selector to order by ascending. An optional partition key. - - - Gets the minimum value of a property in a mongodb collections that is satisfying the filter. - - The document type. - The type of the primary key. - The type of the value used to order the query. - A LINQ expression filter. - A property selector to order by ascending. - An optional partition key. - - + Gets the minimum value of a property in a mongodb collections that is satisfying the filter. @@ -1117,17 +589,108 @@ A property selector to order by ascending. An optional partition key. - + - Gets the minimum value of a property in a mongodb collections that is satisfying the filter. + Sums the values of a selected field for a given filtered collection of documents. - The document type. - The type of the primary key. - The type of the value used to order the query. + The type representing a Document. A LINQ expression filter. - A property selector to order by ascending. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Asynchronously returns a projected document matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. An optional partition key. + + + Returns a projected document matching the filter condition. + + The type representing a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Groups a collection of documents given a grouping criteria, + and returns a dictionary of listed document groups with keys having the different values of the grouping criteria. + + The type representing a Document. + The type of the grouping criteria. + The type of the projected group. + The grouping criteria. + The projected group result. + The partition key of your document, if any. + + + + 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. + + The type representing a Document. + The type of the grouping criteria. + The type of the projected group. + A LINQ expression filter. + The grouping criteria. + The projected group result. + The partition key of your document, if any. + This attribute allows you to specify of the name of the collection. @@ -1148,6 +711,42 @@ The name of the collection. + + + Asynchronously adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to add. + + + + Adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to add. + + + + Asynchronously adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The documents you want to add. + + + + Adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The documents you want to add. + The base Repository, it is meant to be inherited from by your custom custom MongoRepository implementation. @@ -1157,57 +756,14 @@ 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. - - - The constructor taking a connection string and a database name. + 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. - The connection string of the MongoDb server. - The name of the database against which you want to perform operations. - - - The contructor taking a . + 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. - A mongodb context implementing - - - - The contructor taking a . - - A mongodb context implementing - - - - Asynchronously adds a document to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The document you want to add. - - - - Adds a document to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The document you want to add. - - - - Asynchronously adds a list of documents to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The documents you want to add. - - - - Adds a list of documents to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The documents you want to add. @@ -1218,6 +774,14 @@ The type of the primary key for a Document. The document you want to add. + + + Asynchronously adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The document you want to add. + Adds a document to the collection. @@ -1227,6 +791,14 @@ The type of the primary key for a Document. The document you want to add. + + + Adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The document you want to add. + Asynchronously adds a list of documents to the collection. @@ -1236,6 +808,14 @@ The type of the primary key for a Document. The documents you want to add. + + + Asynchronously adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The documents you want to add. + Adds a list of documents to the collection. @@ -1245,203 +825,13 @@ The type of the primary key for a Document. The documents you want to add. - + - Asynchronously Updates a document. + Adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. The type representing a Document. - The document with the modifications you want to persist. - - - - Updates a document. - - The type representing a Document. - The document with the modifications you want to persist. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The document you want to modify. - The update definition for the document. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - For the entity selected by the filter, updates the property field with the given value. - - The type representing a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The partition key for the document. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - For the entity selected by the filter, updates the property field with the given value. - - The type representing a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The partition key for the document. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The document you want to modify. - The update definition for the document. - - - - Asynchronously Updates a document. - - The type representing a Document. - The type of the primary key for a Document. - The document with the modifications you want to persist. - - - - Updates a document. - - The type representing a Document. - The type of the primary key for a Document. - The document with the modifications you want to persist. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to modify. - The update definition for the document. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to modify. - The update definition for the document. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - For the entity selected by the filter, updates the property field with the given value. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The partition key for the document. - - - - Updates the property field with the given value. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - For the entity selected by the filter, updates the property field with the given value. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The partition key for the document. + The documents you want to add. @@ -1587,121 +977,154 @@ An optional partition key. The number of documents deleted. - + - Asynchronously returns a projected document matching the filter condition. - - The type representing a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Asynchronously returns a projected document matching the filter condition. + Returns the names of the indexes present on a collection. The type representing a Document. The type of the primary key for a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. + An optional partition key + A list containing the names of the indexes on on the concerned collection. - + - Returns a projected document matching the filter condition. + Returns the names of the indexes present on a collection. The type representing a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. + An optional partition key + A list containing the names of the indexes on on the concerned collection. - + - Returns a projected document matching the filter condition. + Create a text index on the given field. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Create a text index on the given field. + IndexCreationOptions can be supplied to further specify + how the creation should be done. The type representing a Document. The type of the primary key for a Document. - The type representing the model you want to project to. - - The projection expression. + The field we want to index. + Options for creating an index. An optional partition key. + The result of the create index operation. - + - Asynchronously returns a list of projected documents matching the filter condition. + Creates an index on the given field in ascending order. + IndexCreationOptions can be supplied to further specify + how the creation should be done. The type representing a Document. - The type representing the model you want to project to. - - The projection expression. + The field we want to index. + Options for creating an index. An optional partition key. + The result of the create index operation. - + - Asynchronously returns a list of projected documents matching the filter condition. + Creates an index on the given field in ascending order. + IndexCreationOptions can be supplied to further specify + how the creation should be done. The type representing a Document. The type of the primary key for a Document. - The type representing the model you want to project to. - - The projection expression. + The field we want to index. + Options for creating an index. An optional partition key. + The result of the create index operation. - + - Asynchronously returns a list of projected documents matching the filter condition. + Creates an index on the given field in descending order. + IndexCreationOptions can be supplied to further specify + how the creation should be done. The type representing a Document. - The type representing the model you want to project to. - - The projection expression. + The field we want to index. + Options for creating an index. An optional partition key. + The result of the create index operation. - + + + + - Asynchronously returns a list of projected documents matching the filter condition. + Creates a hashed index on the given field. + IndexCreationOptions can be supplied to further specify + how the creation should be done. The type representing a Document. - The type of the primary key for a Document. - The type representing the model you want to project to. - The document filter. - The projection expression. + The field we want to index. + Options for creating an index. An optional partition key. + The result of the create index operation. - + + + + - Groups a collection of documents given a grouping criteria, - and returns a dictionary of listed document groups with keys having the different values of the grouping criteria. + Creates a combined text index. + IndexCreationOptions can be supplied to further specify + how the creation should be done. The type representing a Document. - The type of the grouping criteria. - The type of the projected group. - The grouping criteria. - The projected group result. - The partition key of your document, if any. + The fields we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. - + + + + - 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. + Drops the index given a field name The type representing a Document. - The type of the grouping criteria. - The type of the projected group. - - The grouping criteria. - The projected group result. - The partition key of your document, if any. + The name of the index + An optional partition key + + + + + + + The constructor taking a connection string and a database name. + + The connection string of the MongoDb server. + The name of the database against which you want to perform operations. + + + + The contructor taking a . + + A mongodb context implementing + + + + The contructor taking a . + + A mongodb context implementing Asynchronously returns a paginated list of the documents matching the filter condition. The type representing a Document. - + A LINQ expression filter. The number of documents you want to skip. Default value is 0. The number of documents you want to take. Default value is 50. An optional partition key. @@ -1712,7 +1135,7 @@ The type representing a Document. The type of the primary key for a Document. - + A LINQ expression filter. The number of documents you want to skip. Default value is 0. The number of documents you want to take. Default value is 50. An optional partition key. @@ -1722,7 +1145,7 @@ GetAndUpdateOne with filter The type representing a Document. - + A LINQ expression filter. @@ -1733,7 +1156,7 @@ The type representing a Document. The type of the primary key for a Document. - + A LINQ expression filter. @@ -1753,47 +1176,2135 @@ The document type. The document. - - + + + Gets a collections for a potentially partitioned document type. + + The document type. + The collection partition key. + - - + + + Gets a collections for the type TDocument with a partition key. + + The document type. + The collection partition key. + - - + + + Asynchronously Updates a document. + + The type representing a Document. + The document with the modifications you want to persist. - - + + + Updates a document. + + The type representing a Document. + The document with the modifications you want to persist. - - + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The document you want to modify. + The update definition for the document. - - + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The document you want to modify. + The update definition for the document. - - + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. - - + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. - - + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. - - + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. - - + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. - - + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. - - + + + Asynchronously Updates a document. + + The type representing a Document. + The type of the primary key for a Document. + The document with the modifications you want to persist. - - + + + Updates a document. + + The type representing a Document. + The type of the primary key for a Document. + The document with the modifications you want to persist. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to modify. + The update definition for the document. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to modify. + The update definition for the document. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. + + + + Deletes a document. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to delete. + The number of documents deleted. + + + + Asynchronously deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to delete. + The number of documents deleted. + + + + Deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a list of documents. + + The type representing a Document. + The type of the primary key for a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes a list of documents. + + The type representing a Document. + The type of the primary key for a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Returns the names of the indexes present on a collection. + + The type representing a Document. + The type of the primary key for a Document. + An optional partition key + A list containing the names of the indexes on on the concerned collection. + + + + Create a text index on the given field. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The type of the primary key for a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates an index on the given field in ascending order. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The type of the primary key for a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates an index on the given field in descending order. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The type of the primary key for a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates a hashed index on the given field. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The type of the primary key for a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates a combined text index. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The type of the primary key for a Document. + The fields we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Drops the index given a field name + + The type representing a Document. + The type of the primary key for a Document. + The name of the index + An optional partition key + + + + Asynchronously Updates a document. + + The type representing a Document. + The type of the primary key for a Document. + The document with the modifications you want to persist. + + + + Updates a document. + + The type representing a Document. + The type of the primary key for a Document. + The document with the modifications you want to persist. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to modify. + The update definition for the document. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to modify. + The update definition for the document. + + + + For the entity selected by the filter, updates the property field with the given value.. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + Gets a collections for a potentially partitioned document type. + + The document type. + The type of the primary key. + The document. + + + + + Gets a collections for the type TDocument with a partition key. + + The document type. + The type of the primary key. + The collection partition key. + + + + + Gets a collections for a potentially partitioned document type. + + The document type. + The type of the primary key. + The collection partition key. + + + + + Converts a LINQ expression of TDocument, TValue to a LINQ expression of TDocument, object + + The document type. + The type of the value. + The expression to convert + + + + Maps a IndexCreationOptions object to a MongoDB.Driver.CreateIndexOptions object + + The options for creating an index. + + + + + Gets the minimum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the primary key. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partition key. + + + + Gets the minimum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the primary key. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by descending. + An optional partition key. + + + + Asynchronously adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to add. + + + + Adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to add. + + + + Asynchronously adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The documents you want to add. + + + + Adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The documents you want to add. + + + + Sets the value of the document Id if it is not set already. + + The document type. + The type of the primary key. + The document. + + + + Deletes a document. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to delete. + The number of documents deleted. + + + + Asynchronously deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to delete. + The number of documents deleted. + + + + Deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a list of documents. + + The type representing a Document. + The type of the primary key for a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes a list of documents. + + The type representing a Document. + The type of the primary key for a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Returns the names of the indexes present on a collection. + + The type representing a Document. + The type of the primary key for a Document. + An optional partition key + A list containing the names of the indexes on on the concerned collection. + + + + Create a text index on the given field. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The type of the primary key for a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates an index on the given field in ascending order. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The type of the primary key for a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates an index on the given field in descending order. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The type of the primary key for a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates a hashed index on the given field. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The type of the primary key for a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates a combined text index. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The type of the primary key for a Document. + The fields we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Drops the index given a field name + + The type representing a Document. + The type of the primary key for a Document. + The name of the index + An optional partition key + + + + Asynchronously returns one document given its id. + + The type representing a Document. + The type of the primary key for a Document. + The Id of the document you want to get. + An optional partition key. + + + + Returns one document given its id. + + The type representing a Document. + The type of the primary key for a Document. + The Id of the document you want to get. + An optional partition key. + + + + Asynchronously returns one document given an expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns one document given an expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns a collection cursor. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns true if any of the document of the collection matches the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns true if any of the document of the collection matches the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Asynchronously returns a list of the documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns a list of the documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + + + + Asynchronously counts how many documents match the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partitionKey + + + + Counts how many documents match the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partitionKey + + + + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + The type of the primary key. + A LINQ expression filter. + A property selector to order by descending. + An optional partitionKey. + + + + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + The type of the primary key. + A LINQ expression filter. + A property selector to order by descending. + An optional partitionKey. + + + + Gets the document with the minimum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + The type of the primary key. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the document with the minimum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + The type of the primary key. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the maximum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the primary key. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the maximum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the primary key. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the minimum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the primary key. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partition key. + + + + Gets the minimum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the primary key. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partition key. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Groups a collection of documents given a grouping criteria, + and returns a dictionary of listed document groups with keys having the different values of the grouping criteria. + + The type representing a Document. + The type of the primary key for a Document. + The type of the grouping criteria. + The type of the projected group. + The grouping criteria. + The projected group result. + The partition key of your document, if any. + + + + 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. + + The type representing a Document. + The type of the primary key for a Document. + The type of the grouping criteria. + The type of the projected group. + A LINQ expression filter. + The grouping criteria. + The projected group result. + The partition key of your document, if any. + + + + Asynchronously returns a paginated list of the documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + The property selector. + Order of the sorting. + The number of documents you want to skip. Default value is 0. + The number of documents you want to take. Default value is 50. + An optional partition key. + + + + Asynchronously returns a paginated list of the documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + The sort definition. + The number of documents you want to skip. Default value is 0. + The number of documents you want to take. Default value is 50. + An optional partition key. + + + + Asynchronously returns a projected document matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Returns a projected document matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + The document filter. + The projection expression. + An optional partition key. + + + + Asynchronously Updates a document. + + The type representing a Document. + The type of the primary key for a Document. + The document with the modifications you want to persist. + + + + Updates a document. + + The type representing a Document. + The type of the primary key for a Document. + The document with the modifications you want to persist. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to modify. + The update definition for the document. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to modify. + The update definition for the document. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. + + + + Updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. + + + + The interface exposing data insertion functionality for Key typed repositories. + + + + + + Asynchronously adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The document you want to add. + + + + Adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The document you want to add. + + + + Asynchronously adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The documents you want to add. + + + + Adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The documents you want to add. + + + + 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. + + + 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. + + + 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. + + The type of the document Id. + + + + The MongoDb accessor to insert data. + + + + + Asynchronously adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The document you want to add. + + + + Adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The document you want to add. + + + + Asynchronously adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The documents you want to add. + + + + Adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The documents you want to add. + + + + The MongoDb accessor to delete data. + + + + + Deletes a document. + + The type representing a Document. + The document you want to delete. + The number of documents deleted. + + + + Asynchronously deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + The document you want to delete. + The number of documents deleted. + + + + Deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a list of documents. + + The type representing a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes a list of documents. + + The type representing a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + The MongoDb accessor to manage indexes. + + + + + Returns the names of the indexes present on a collection. + + The type representing a Document. + An optional partition key + A list containing the names of the indexes on on the concerned collection. + + + + Create a text index on the given field. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates an index on the given field in ascending order. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates an index on the given field in descending order. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates a hashed index on the given field. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates a combined text index. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The fields we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Drops the index given a field name + + The type representing a Document. + The name of the index + An optional partition key + + + + The constructor taking a connection string and a database name. + + The connection string of the MongoDb server. + The name of the database against which you want to perform operations. + + + + The contructor taking a . + + A mongodb context implementing + + + + The contructor taking a . + + A mongodb context implementing + + + + Gets a collections for a potentially partitioned document type. + + The document type. + The collection partition key. + + + + + Gets a collections for the type TDocument with a partition key. + + The document type. + The collection partition key. + + + + + Asynchronously Updates a document. + + The type representing a Document. + The document with the modifications you want to persist. + + + + Updates a document. + + The type representing a Document. + The document with the modifications you want to persist. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The document you want to modify. + The update definition for the document. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The document you want to modify. + The update definition for the document. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. + + + + The interface exposing deletion functionality for Key typed repositories. + + The type of the document Id. + + + + Deletes a document. + + The type representing a Document. + The document you want to delete. + The number of documents deleted. + + + + Asynchronously deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + The document you want to delete. + The number of documents deleted. + + + + Deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a list of documents. + + The type representing a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes a list of documents. + + The type representing a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + The interface exposing index management functionality for Key typed repositories. + + + + + + Returns the names of the indexes present on a collection. + + The type representing a Document. + An optional partition key + A list containing the names of the indexes on on the concerned collection. + + + + Create a text index on the given field. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates an index on the given field in ascending order. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates an index on the given field in descending order. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates a hashed index on the given field. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The field we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Creates a combined text index. + IndexCreationOptions can be supplied to further specify + how the creation should be done. + + The type representing a Document. + The fields we want to index. + Options for creating an index. + An optional partition key. + The result of the create index operation. + + + + Drops the index given a field name + + The type representing a Document. + The name of the index + An optional partition key + + + + The interface exposing all the CRUD and Index functionalities for Key typed repositories. + + The type of the document Id. + + + + 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. + + + + + The connection string. + + + + + The database name. + + + + + The MongoDbContext + + + + + A MongoDb Reader for read operations + + + + + The constructor taking a connection string and a database name. + + The connection string of the MongoDb server. + The name of the database against which you want to perform operations. + + + + The contructor taking a . + + A mongodb context implementing + + + + The contructor taking a . + + A mongodb context implementing + + + + Asynchronously returns one document given its id. + + The type representing a Document. + The Id of the document you want to get. + An optional partition key. + + + + Returns one document given its id. + + The type representing a Document. + The Id of the document you want to get. + An optional partition key. + + + + Asynchronously returns one document given an expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns one document given an expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns a collection cursor. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns true if any of the document of the collection matches the filter condition. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns true if any of the document of the collection matches the filter condition. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + + + + Asynchronously returns a list of the documents matching the filter condition. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + + + + Returns a list of the documents matching the filter condition. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + + + + Asynchronously counts how many documents match the filter condition. + + The type representing a Document. + A LINQ expression filter. + An optional partitionKey + + + + Counts how many documents match the filter condition. + + The type representing a Document. + A LINQ expression filter. + An optional partitionKey + + + + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + A LINQ expression filter. + A property selector to order by descending. + An optional partitionKey. + + + + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + A LINQ expression filter. + A property selector to order by descending. + An optional partitionKey. + + + + + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. + + The document type. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the maximum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the maximum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partitionKey. + + + + Gets the minimum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partition key. + + + + Gets the minimum value of a property in a mongodb collections that is satisfying the filter. + + The document type. + The type of the value used to order the query. + A LINQ expression filter. + A property selector to order by ascending. + An optional partition key. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Asynchronously returns a projected document matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Returns a projected document matching the filter condition. + + The type representing a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Groups a collection of documents given a grouping criteria, + and returns a dictionary of listed document groups with keys having the different values of the grouping criteria. + + The type representing a Document. + The type of the grouping criteria. + The type of the projected group. + The grouping criteria. + The projected group result. + The partition key of your document, if any. + + + + 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. + + The type representing a Document. + The type of the grouping criteria. + The type of the projected group. + A LINQ expression filter. + The grouping criteria. + The projected group result. + The partition key of your document, if any. + + + + Asynchronously returns a paginated list of the documents matching the filter condition. + + The type representing a Document. + A LINQ expression filter. + The property selector. + Order of the sorting. + The number of documents you want to skip. Default value is 0. + The number of documents you want to take. Default value is 50. + An optional partition key. + + + + Asynchronously returns a paginated list of the documents matching the filter condition. + + The type representing a Document. + A LINQ expression filter. + The sort definition. + The number of documents you want to skip. Default value is 0. + The number of documents you want to take. Default value is 50. + An optional partition key. + + + + Asynchronously Updates a document. + + The type representing a Document. + The document with the modifications you want to persist. + + + + Updates a document. + + The type representing a Document. + The document with the modifications you want to persist. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The document you want to modify. + The update definition for the document. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The document you want to modify. + The update definition for the document. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The partition key for the document. @@ -1960,29 +3471,17 @@ - The IMongoClient from the official MongoDb driver + The IMongoClient from the official MongoDB driver - The IMongoDatabase from the official Mongodb driver - - - - - Sets the Guid representation of the MongoDb Driver. - - The new value of the GuidRepresentation - - - - Initialize the Guid representation of the MongoDb Driver. - Override this method to change the default GuidRepresentation. + The IMongoDatabase from the official MongoDB driver - The constructor of the MongoDbContext, it needs a an object implementing . + The constructor of the MongoDbContext, it needs an object implementing . An object implementing IMongoDatabase @@ -1993,12 +3492,12 @@ The connections string. The name of your database. - + - Extracts the CollectionName attribute from the entity type, if any. + The constructor of the MongoDbContext, it needs a connection string and a database name. - The type representing a Document. - The name of the collection in which the TDocument is stored. + The MongoClient. + The name of your database. @@ -2013,9 +3512,28 @@ The type representing a Document. + + + Sets the Guid representation of the MongoDB Driver. + + The new value of the GuidRepresentation + + + + Extracts the CollectionName attribute from the entity type, if any. + + The type representing a Document. + The name of the collection in which the TDocument is stored. + + + + Initialize the Guid representation of the MongoDB Driver. + Override this method to change the default GuidRepresentation. + + - Given the docmuent type and the partition key, returns the name of the collection it belongs to. + Given the document type and the partition key, returns the name of the collection it belongs to. The type representing a Document. The value of the partition key. @@ -2030,22 +3548,8 @@ - The ReadOnlyMongoRepository implements the readonly functionality of the IReadOnlyMongoRepository. - - - - - The connection string. - - - - - The database name. - - - - - The MongoDbContext + 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. @@ -2067,131 +3571,6 @@ A mongodb context implementing - - - Asynchronously returns one document given its id. - - The type representing a Document. - The Id of the document you want to get. - An optional partition key. - - - - Returns one document given its id. - - The type representing a Document. - The Id of the document you want to get. - An optional partition key. - - - - Asynchronously returns one document given an expression filter. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - - - - Returns one document given an expression filter. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - - - - Returns a collection cursor. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - - - - Returns true if any of the document of the collection matches the filter condition. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - - - - Returns true if any of the document of the collection matches the filter condition. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - - - - Asynchronously returns a list of the documents matching the filter condition. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - - - - Returns a list of the documents matching the filter condition. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - - - - Asynchronously counts how many documents match the filter condition. - - The type representing a Document. - A LINQ expression filter. - An optional partitionKey - - - - Counts how many documents match the filter condition. - - The type representing a Document. - A LINQ expression filter. - An optional partitionKey - - - - Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. - - The document type. - A LINQ expression filter. - A property selector to order by descending. - An optional partitionKey. - - - - Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. - - The document type. - A LINQ expression filter. - A property selector to order by descending. - An optional partitionKey. - - - - - Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. - - The document type. - A LINQ expression filter. - A property selector to order by ascending. - An optional partitionKey. - - - - Gets the document with the maximum value of a specified property in a MongoDB collections that is satisfying the filter. - - The document type. - A LINQ expression filter. - A property selector to order by ascending. - An optional partitionKey. - Asynchronously returns one document given its id. @@ -2331,56 +3710,15 @@ A property selector to order by ascending. An optional partitionKey. - - - Gets the minimum value of a property in a mongodb collections that is satisfying the filter. - - The document type. - The type of the primary key. - The type of the value used to order the query. - A LINQ expression filter. - A property selector to order by ascending. - An optional partition key. - - - - Gets the minimum value of a property in a mongodb collections that is satisfying the filter. - - The document type. - The type of the primary key. - The type of the value used to order the query. - A LINQ expression filter. - A property selector to order by descending. - An optional partition key. - - - - Gets the maximum value of a property in a mongodb collections that is satisfying the filter. - - The document type. - The type of the value used to order the query. - A LINQ expression filter. - A property selector to order by ascending. - An optional partitionKey. - Gets the maximum value of a property in a mongodb collections that is satisfying the filter. The document type. The type of the primary key. - A LINQ expression filter. - A property selector to order by ascending. - An optional partitionKey. - - - - Gets the maximum value of a property in a mongodb collections that is satisfying the filter. - - The document type. The type of the value used to order the query. A LINQ expression filter. - A property selector to order by ascending. + A property selector to select the max value. An optional partitionKey. @@ -2394,16 +3732,6 @@ A property selector to order by ascending. An optional partitionKey. - - - Gets the minimum value of a property in a mongodb collections that is satisfying the filter. - - The document type. - The type of the value used to order the query. - A LINQ expression filter. - A property selector to order by ascending. - An optional partition key. - Gets the minimum value of a property in a mongodb collections that is satisfying the filter. @@ -2415,16 +3743,6 @@ A property selector to order by ascending. An optional partition key. - - - Gets the minimum value of a property in a mongodb collections that is satisfying the filter. - - The document type. - The type of the value used to order the query. - A LINQ expression filter. - A property selector to order by ascending. - An optional partition key. - Gets the minimum value of a property in a mongodb collections that is satisfying the filter. @@ -2436,21 +3754,141 @@ A property selector to order by ascending. An optional partition key. - + - Gets a collections for the type TDocument with the matching partition key (if any). + Sums the values of a selected field for a given filtered collection of documents. - The document type. - An optional partition key. - An + The type representing a Document. + The type of the primary key. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. - + - Gets a collections for the type TDocument + Sums the values of a selected field for a given filtered collection of documents. - The document type. - The document. - + The type representing a Document. + The type of the primary key. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + The type of the primary key. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Sums the values of a selected field for a given filtered collection of documents. + + The type representing a Document. + The type of the primary key. + A LINQ expression filter. + The field you want to sum. + The partition key of your document, if any. + + + + Asynchronously returns a projected document matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Returns a projected document matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + A LINQ expression filter. + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + The document filter. + The projection expression. + An optional partition key. + + + + 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. + + The type representing a Document. + The type of the primary key for a Document. + The type of the grouping criteria. + The type of the projected group. + The grouping criteria. + The projected group result. + The partition key of your document, if any. + + + + 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. + + The type representing a Document. + The type of the primary key for a Document. + The type of the grouping criteria. + The type of the projected group. + A LINQ expression filter. + The grouping criteria. + The projected group result. + The partition key of your document, if any. + + + + Asynchronously returns a paginated list of the documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + The property selector. + Order of the sorting. + The number of documents you want to skip. Default value is 0. + The number of documents you want to take. Default value is 50. + An optional partition key. + + + + Asynchronously returns a paginated list of the documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + The sort definition. + The number of documents you want to skip. Default value is 0. + The number of documents you want to take. Default value is 50. + An optional partition key. @@ -2461,23 +3899,6 @@ The document. - - - Gets a collections for a potentially partitioned document type. - - The document type. - The collection partition key. - - - - - Gets a collections for the type TDocument with a partition key. - - The document type. - The type of the primary key. - The collection partition key. - - Gets a collections for a potentially partitioned document type. @@ -2487,13 +3908,22 @@ The collection partition key. - + - Converts a LINQ expression of TDocument, TValue to a LINQ expression of TDocument, object + Gets a collections for a potentially partitioned document type. The document type. - The type of the value. - The expression to convert + The document. + + + + + Gets a collections for the type TDocument with a partition key. + + The document type. + The type of the primary key. + The collection partition key. +