目錄
linux安裝mongodb
啟動mongodb服務
mongodb集成到asp .net Core Web Api項目(源碼可下載)
1.首先我們需要創建一個poems數據庫
進入mongodb安裝的bin目錄
cd /usr/local/mongodb/bin
執行啟動命令
./mongod --config /usr/local/mongodb/conf/mongodb.confs
輸入mongo命令
[root@iZwz92gauwq11sx9e2qmpeZ bin]# mongo MongoDB shell version v4.0.13 connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb Implicit session: session { "id" : UUID("152de530-65d3-4de1-8cb7-302b3ced501c") } MongoDB server version: 4.0.13c
執行創建poems數據庫命令
use poems
由於配置了權限認證,我們需要為poems數據庫創建一個用戶
但先要切換到admin庫,然后輸入登錄用戶進行授權驗證
登錄成功后,切回到 poems 庫,就可以為該庫創建用戶了,執行命令如下:
> use admin switched to db admin > db.auth('root','123456') 1 > use poems switched to db poems > db.createUser({user:'ptest',pwd:'123456987',roles:['readWrite']}) Successfully added user: { "user" : "ptest", "roles" : [ "readWrite" ] } >
2.創建 ASP.NET Core Web API 項目
創建net Core項目,將其命名為:PoemsApi,創建項目后,通過NuGet庫引入MongoDB.Driver包
3.添加實體模型
將 Models 目錄添加到項目根。
使用以下代碼將 FamousPoemsModels類添加到 Models 目錄
using MongoDB.Bson; using MongoDB.Bson.Serialization.Attributes; using System; namespace Models { public class FamousPoemsModels { public FamousPoemsModels() { } [BsonId] [BsonRepresentation(BsonType.ObjectId)] public string Id { get; set; } /// <summary> /// 作者 /// </summary> public string vcAuthor { get; set; } /// <summary> /// 內容 /// </summary> public string vcContent { get; set; } /// <summary> /// 標題 /// </summary> public string vcTitle { get; set; } /// <summary> /// 創建時間 /// </summary> [BsonDateTimeOptions(Kind = DateTimeKind.Local)] public DateTime dtCreateTime { get; set; } /// <summary> /// 更新時間 /// </summary> [BsonDateTimeOptions(Kind = DateTimeKind.Local)] public DateTime dtUpdateTime { get; set; } } }
4.添加配置模型
(1)、appsettings.json 添加以下數據庫配置值
{ "MongdbSettings": { "FamousPoemsCollectionName": "FamousPoems", "ConnectionString": "mongodb://ptest:123456987@120.79.76.160:27017/poems?maxPoolSize=500", "DatabaseName": "poems" }, "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*" }
(2)、使用以下代碼將 MongdbSettings.cs 文件添加到 Services目錄 ,Services目錄需要先創建,並在根目錄下
using System; namespace Service { public class MongdbSettings : IMongdbSettings { public string FamousPoemsCollectionName { get; set; } public string ConnectionString { get; set; } public string DatabaseName { get; set; } } public interface IMongdbSettings { public string FamousPoemsCollectionName { get; set; } string ConnectionString { get; set; } string DatabaseName { get; set; } } }
MongdbSettings類用於存儲 appsettings.json 文件的 MongdbSettings 屬性值。 JSON 和 C# 具有相同的屬性名稱,目的是簡化映射過程。
5.將以下突出顯示的代碼添加到 Startup.ConfigureServices
public void ConfigureServices(IServiceCollection services) { #region mongodb配置 services.Configure<MongdbSettings>( Configuration.GetSection(nameof(MongdbSettings))); services.AddSingleton<IMongdbSettings>(sp => sp.GetRequiredService<IOptions<MongdbSettings>>().Value);
#endregion services.AddControllers(); }
appsettings.json 文件的 MongdbSettings部分綁定到的配置實例在依賴關系注入 (DI) 容器中注冊。 例如,MongdbSettings對象的 ConnectionString 屬性使用 appsettings.json 中的 MongdbSettings:ConnectionString 屬性進行填充。
IMongdbSettings 接口使用單一實例服務生存期在 DI 中注冊。 在注入時,接口實例時將解析為 MongdbSettings對象。
6.添加 CRUD 操作服務
使用以下代碼將 FamousPoemsService類添加到 Services 目錄
using Models; using MongoDB.Driver; using System; using System.Collections.Generic; using System.Threading.Tasks; namespace Services { public class FamousPoemsService { private readonly IMongoCollection<FamousPoemsModels> _mongDb; public FamousPoemsService(IMongdbSettings settings) { var client = new MongoClient(settings.ConnectionString); var database = client.GetDatabase(settings.DatabaseName); _mongDb = database.GetCollection<FamousPoemsModels>(settings.FamousPoemsCollectionName); } public FamousPoemsModels Insert(FamousPoemsModels model) { _mongDb.InsertOne(model); return model; } public int InsertManyAsync(List<FamousPoemsModels> list) { _mongDb.InsertManyAsync(list); return list.Count; } public void Update(string id, FamousPoemsModels model) { _mongDb.ReplaceOne(m => m.Id == id, model); } public void Delete(FamousPoemsModels model) { _mongDb.DeleteOne(m => m.Id == model.Id); } public FamousPoemsModels Get(string id) { return _mongDb.Find<FamousPoemsModels>(book => book.Id == id).FirstOrDefault(); } public List<FamousPoemsModels> GetPageList(int nPageIndex = 1, int nPageSize = 10) { //設置排序字段 var sort = Builders<FamousPoemsModels>.Sort.Descending(it => it.dtCreateTime); return _mongDb.Find<FamousPoemsModels>(b => true).Sort(sort).Skip((nPageIndex - 1) * nPageSize).Limit(nPageSize).ToList(); } } }
上面的代碼通過構造函數注入從 DI 檢索IMongdbSettings實例。 使用此方法可訪問在添加配置模型部分中添加的 appsettings.json 配置值。
將以下突出顯示的代碼添加到 Startup.ConfigureServices
public void ConfigureServices(IServiceCollection services) { #region mongodb配置 services.Configure<MongdbSettings>( Configuration.GetSection(nameof(MongdbSettings))); services.AddSingleton<IMongdbSettings>(sp => sp.GetRequiredService<IOptions<MongdbSettings>>().Value); services.AddSingleton<FamousPoemsService>(); #endregion services.AddControllers(); }
上面的代碼向 DI 注冊了 FamousPoemsService 類,以支持消費類中的構造函數注入。 單一實例服務生存期是最合適的,因為 FamousPoemsService直接依賴於 MongoClient。 根據官方 Mongo Client 重用准則,應使用單一實例服務生存期在 DI 中注冊 MongoClient。
FamousPoemsService 類使用以下 MongoDB.Driver 成員對數據庫執行 CRUD 操作:
MongoClient:讀取用於執行數據庫操作的服務器實例。 此類的構造函數提供了 MongoDB 連接字符串
public FamousPoemsService(IMongdbSettings settings) { var client = new MongoClient(settings.ConnectionString); var database = client.GetDatabase(settings.DatabaseName); _mongDb = database.GetCollection<FamousPoemsModels>(settings.FamousPoemsCollectionName); }
7.添加控制器
使用以下代碼將 PoemsController類添加到 Controllers 目錄
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Models; using Newtonsoft.Json; using Services; namespace WebApi.Controllers { public class PoemsController : ControllerBase { private readonly FamousPoemsService _poemsService; public PoemsController(FamousPoemsService poemsService) { _poemsService = poemsService; } [HttpPost("Poems/Insert")] public ActionResult Insert([FromBody]FamousPoemsModels poems) { poems.dtCreateTime = DateTime.Now; poems.dtUpdateTime = DateTime.Now; return Content(JsonConvert.SerializeObject(_poemsService.Insert(poems))); } [HttpPost("Poems/InsertManyAsync")] public ActionResult InsertManyAsync([FromBody]List<FamousPoemsModels> poems) { return Content(JsonConvert.SerializeObject(_poemsService.InsertManyAsync(poems))); } [HttpPost("Poems/Update")] public ActionResult Update([FromBody]FamousPoemsModels poems) { _poemsService.Update(poems); return NoContent(); } [HttpPost("Poems/Delete")] public ActionResult Delete([FromBody]FamousPoemsModels poems) { _poemsService.Delete(poems); return NoContent(); } [HttpGet("Poems/Get")] public ActionResult Get(string id) { return Content(JsonConvert.SerializeObject(_poemsService.Get(id))); } [HttpGet("Poems/List")] public ActionResult GetPageList(int nPageIndex = 1, int nPageSize = 10) { return Content(JsonConvert.SerializeObject(_poemsService.GetPageList(nPageIndex, nPageSize))); } } }
gitee克隆地址:https://gitee.com/fan_zhongtuan/PoemsApi.git
百度網盤鏈接:https://pan.baidu.com/s/1GGCOfcd3KsUIImiRe68R8g
提取碼:1yf5
mongodb客戶端工具:https://www.jb51.net/article/199496.htm(Navicat Premium 15 永久破解激活工具及安裝教程)