diff --git a/modules/docs/Volo.Docs.sln b/modules/docs/Volo.Docs.sln
index 4eaa1cd14a..74e748ac9b 100644
--- a/modules/docs/Volo.Docs.sln
+++ b/modules/docs/Volo.Docs.sln
@@ -55,7 +55,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VoloDocs.EntityFrameworkCor
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VoloDocs.Web", "app\VoloDocs.Web\VoloDocs.Web.csproj", "{057EA924-4524-4452-840C-5E3D509F2ED3}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VoloDocs.Migrator", "app\VoloDocs.Migrator\VoloDocs.Migrator.csproj", "{8A5E5001-C017-44A8-ADDA-DC66C102556E}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VoloDocs.Migrator", "app\VoloDocs.Migrator\VoloDocs.Migrator.csproj", "{8A5E5001-C017-44A8-ADDA-DC66C102556E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Docs.MongoDB", "src\Volo.Docs.MongoDB\Volo.Docs.MongoDB.csproj", "{DBE846CD-1BED-4F2C-ABF2-94F6240BCB9B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Docs.MongoDB.Tests", "test\Volo.Docs.MongoDB.Tests\Volo.Docs.MongoDB.Tests.csproj", "{C5E2A2A3-D54D-4C2E-97BA-EA50A49ED7AD}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -147,6 +151,14 @@ Global
{8A5E5001-C017-44A8-ADDA-DC66C102556E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8A5E5001-C017-44A8-ADDA-DC66C102556E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8A5E5001-C017-44A8-ADDA-DC66C102556E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {DBE846CD-1BED-4F2C-ABF2-94F6240BCB9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DBE846CD-1BED-4F2C-ABF2-94F6240BCB9B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DBE846CD-1BED-4F2C-ABF2-94F6240BCB9B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DBE846CD-1BED-4F2C-ABF2-94F6240BCB9B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C5E2A2A3-D54D-4C2E-97BA-EA50A49ED7AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C5E2A2A3-D54D-4C2E-97BA-EA50A49ED7AD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C5E2A2A3-D54D-4C2E-97BA-EA50A49ED7AD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C5E2A2A3-D54D-4C2E-97BA-EA50A49ED7AD}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -176,6 +188,8 @@ Global
{1B459653-8DAC-41CD-A08E-28D6E74265D3} = {555508AD-F593-43E3-9354-9FA51512F181}
{057EA924-4524-4452-840C-5E3D509F2ED3} = {555508AD-F593-43E3-9354-9FA51512F181}
{8A5E5001-C017-44A8-ADDA-DC66C102556E} = {555508AD-F593-43E3-9354-9FA51512F181}
+ {DBE846CD-1BED-4F2C-ABF2-94F6240BCB9B} = {A982A58E-1E92-4764-9F56-39E7AABB8556}
+ {C5E2A2A3-D54D-4C2E-97BA-EA50A49ED7AD} = {59D430A9-AC61-4457-8338-5DA0705ABB5D}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {13691265-2547-4FFF-B757-E8FACB05679D}
diff --git a/modules/docs/src/Volo.Docs.MongoDB/Volo.Docs.MongoDB.csproj b/modules/docs/src/Volo.Docs.MongoDB/Volo.Docs.MongoDB.csproj
new file mode 100644
index 0000000000..ebe3500cac
--- /dev/null
+++ b/modules/docs/src/Volo.Docs.MongoDB/Volo.Docs.MongoDB.csproj
@@ -0,0 +1,17 @@
+
+
+
+
+
+ netstandard2.0
+ Volo.Docs.MongoDB
+ Volo.Docs.MongoDB
+
+
+
+
+
+
+
+
+
diff --git a/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/BloggingMongoDbModule.cs b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/BloggingMongoDbModule.cs
new file mode 100644
index 0000000000..68b7827b08
--- /dev/null
+++ b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/BloggingMongoDbModule.cs
@@ -0,0 +1,22 @@
+using Volo.Abp.Modularity;
+using Volo.Abp.MongoDB;
+using Volo.Docs.Projects;
+using Microsoft.Extensions.DependencyInjection;
+
+namespace Volo.Docs.MongoDB
+{
+ [DependsOn(
+ typeof(DocsDomainModule),
+ typeof(AbpMongoDbModule)
+ )]
+ public class DocsMongoDbModule : AbpModule
+ {
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ context.Services.AddMongoDbContext(options =>
+ {
+ options.AddRepository();
+ });
+ }
+ }
+}
diff --git a/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/DocsMongoDbContext.cs b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/DocsMongoDbContext.cs
new file mode 100644
index 0000000000..faa8b6bfa7
--- /dev/null
+++ b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/DocsMongoDbContext.cs
@@ -0,0 +1,25 @@
+using MongoDB.Driver;
+using Volo.Abp.Data;
+using Volo.Docs.Projects;
+using Volo.Abp.MongoDB;
+
+namespace Volo.Docs.MongoDB
+{
+ [ConnectionStringName(DocsConsts.ConnectionStringName)]
+ public class DocsMongoDbContext : AbpMongoDbContext, IDocsMongoDbContext
+ {
+ public static string CollectionPrefix { get; set; } = DocsConsts.DefaultDbTablePrefix;
+
+ public IMongoCollection Projects => Collection();
+
+ protected override void CreateModel(IMongoModelBuilder modelBuilder)
+ {
+ base.CreateModel(modelBuilder);
+
+ modelBuilder.ConfigureDocs(options =>
+ {
+ options.CollectionPrefix = CollectionPrefix;
+ });
+ }
+ }
+}
diff --git a/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/DocsMongoDbContextExtensions.cs b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/DocsMongoDbContextExtensions.cs
new file mode 100644
index 0000000000..8975dd4de5
--- /dev/null
+++ b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/DocsMongoDbContextExtensions.cs
@@ -0,0 +1,28 @@
+
+using System;
+using Volo.Abp;
+using Volo.Abp.MongoDB;
+using Volo.Docs.Projects;
+
+namespace Volo.Docs.MongoDB
+{
+ public static class DocsMongoDbContextExtensions
+ {
+ public static void ConfigureDocs(
+ this IMongoModelBuilder builder,
+ Action optionsAction = null)
+ {
+ Check.NotNull(builder, nameof(builder));
+
+ var options = new DocsMongoModelBuilderConfigurationOptions();
+
+ optionsAction?.Invoke(options);
+
+ builder.Entity(b =>
+ {
+ b.CollectionName = options.CollectionPrefix + "Projects";
+ });
+ }
+ }
+}
+
diff --git a/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/DocsMongoModelBuilderConfigurationOptions.cs b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/DocsMongoModelBuilderConfigurationOptions.cs
new file mode 100644
index 0000000000..1afc610d5e
--- /dev/null
+++ b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/DocsMongoModelBuilderConfigurationOptions.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using JetBrains.Annotations;
+using Volo.Abp.MongoDB;
+
+namespace Volo.Docs.MongoDB
+{
+ public class DocsMongoModelBuilderConfigurationOptions : MongoModelBuilderConfigurationOptions
+ {
+ public DocsMongoModelBuilderConfigurationOptions([NotNull] string tablePrefix = DocsConsts.DefaultDbTablePrefix)
+ : base(tablePrefix)
+ {
+ }
+ }
+}
diff --git a/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/IDocsMongoDbContext.cs b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/IDocsMongoDbContext.cs
new file mode 100644
index 0000000000..ec4f3b1fde
--- /dev/null
+++ b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/IDocsMongoDbContext.cs
@@ -0,0 +1,15 @@
+using MongoDB.Driver;
+using Volo.Abp.Data;
+using Volo.Abp.MongoDB;
+using Volo.Docs.Projects;
+
+namespace Volo.Docs.MongoDB
+{
+ [ConnectionStringName(DocsConsts.ConnectionStringName)]
+ public interface IDocsMongoDbContext : IAbpMongoDbContext
+ {
+
+ IMongoCollection Projects { get; }
+
+ }
+}
\ No newline at end of file
diff --git a/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Projects/MongoProjectRepository.cs b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Projects/MongoProjectRepository.cs
new file mode 100644
index 0000000000..6f2359e339
--- /dev/null
+++ b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Projects/MongoProjectRepository.cs
@@ -0,0 +1,42 @@
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using MongoDB.Driver;
+using MongoDB.Driver.Linq;
+using Volo.Abp.Domain.Entities;
+using Volo.Abp.Domain.Repositories.MongoDB;
+using Volo.Abp.MongoDB;
+using Volo.Docs.MongoDB;
+using System.Linq;
+using System.Linq.Dynamic.Core;
+
+namespace Volo.Docs.Projects
+{
+ public class MongoProjectRepository : MongoDbRepository, IProjectRepository
+ {
+ public MongoProjectRepository(IMongoDbContextProvider dbContextProvider) : base(dbContextProvider)
+ {
+ }
+
+ public async Task> GetListAsync(string sorting, int maxResultCount, int skipCount)
+ {
+ var projects = await GetMongoQueryable().OrderBy(sorting ?? "Id desc").As>()
+ .PageBy>(skipCount, maxResultCount)
+ .ToListAsync();
+
+ return projects;
+ }
+
+ public async Task GetByShortNameAsync(string shortName)
+ {
+ var project = await GetMongoQueryable().FirstOrDefaultAsync(p => p.ShortName == shortName);
+
+ if (project == null)
+ {
+ throw new EntityNotFoundException($"Project with the name {shortName} not found!");
+ }
+
+ return project;
+ }
+ }
+}
diff --git a/modules/docs/test/Volo.Docs.MongoDB.Tests/Volo.Docs.MongoDB.Tests.csproj b/modules/docs/test/Volo.Docs.MongoDB.Tests/Volo.Docs.MongoDB.Tests.csproj
new file mode 100644
index 0000000000..1366f0d593
--- /dev/null
+++ b/modules/docs/test/Volo.Docs.MongoDB.Tests/Volo.Docs.MongoDB.Tests.csproj
@@ -0,0 +1,19 @@
+
+
+
+ netcoreapp2.2
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/modules/docs/test/Volo.Docs.MongoDB.Tests/Volo/Docs/MongoDB/DocsMongoDBTestModule.cs b/modules/docs/test/Volo.Docs.MongoDB.Tests/Volo/Docs/MongoDB/DocsMongoDBTestModule.cs
new file mode 100644
index 0000000000..29f2df647d
--- /dev/null
+++ b/modules/docs/test/Volo.Docs.MongoDB.Tests/Volo/Docs/MongoDB/DocsMongoDBTestModule.cs
@@ -0,0 +1,31 @@
+using Mongo2Go;
+using Volo.Abp;
+using Volo.Abp.Data;
+using Volo.Abp.Modularity;
+
+namespace Volo.Docs.MongoDB
+{
+ [DependsOn(
+ typeof(DocsTestBaseModule),
+ typeof(DocsMongoDbModule)
+ )]
+ public class DocsMongoDBTestModule : AbpModule
+ {
+ private MongoDbRunner _mongoDbRunner;
+
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ _mongoDbRunner = MongoDbRunner.Start();
+
+ Configure(options =>
+ {
+ options.ConnectionStrings.Default = _mongoDbRunner.ConnectionString;
+ });
+ }
+
+ public override void OnApplicationShutdown(ApplicationShutdownContext context)
+ {
+ _mongoDbRunner.Dispose();
+ }
+ }
+}
diff --git a/modules/docs/test/Volo.Docs.MongoDB.Tests/Volo/Docs/Project/ProjectRepository_Tests.cs b/modules/docs/test/Volo.Docs.MongoDB.Tests/Volo/Docs/Project/ProjectRepository_Tests.cs
new file mode 100644
index 0000000000..6f2df01a11
--- /dev/null
+++ b/modules/docs/test/Volo.Docs.MongoDB.Tests/Volo/Docs/Project/ProjectRepository_Tests.cs
@@ -0,0 +1,8 @@
+using Volo.Docs.MongoDB;
+
+namespace Volo.Docs.Project
+{
+ public class ProjectRepository_Tests : ProjectRepository_Tests
+ {
+ }
+}