愚公系列2022年05月 .NET架構(gòu)班 059-分布式中間件 .Net Core下使用Mongodb的封裝

      網(wǎng)友投稿 782 2022-05-29

      一、Mongodb的基本概念

      【愚公系列】2022年05月 .NET架構(gòu)班 059-分布式中間件 .Net Core下使用Mongodb的封裝

      1.Mongodb的數(shù)據(jù)結(jié)構(gòu)

      2.Mongodb數(shù)據(jù)類型

      MongoDB的最小存儲單位就是文檔(document)對象。文檔(document)對象對應(yīng)于關(guān)系型數(shù)據(jù)庫的行。數(shù)據(jù)在MongoDB中以BSON(Binary-JSON)文檔的格式存儲在磁盤上。

      BSON(Binary Serialized Document Format)是一種類json的一種二進(jìn)制形式的存儲格式,簡稱Binary JSON。BSON和JSON一樣,支持內(nèi)嵌的文檔對象和數(shù)組對象,但是BSON有JSON沒有的一些數(shù)據(jù)類型,如Date和BinData類型。

      二、Mongodb的代碼封裝

      1.配置文件

      { "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "ProductMongoDBOptions": { "ConnectionString": "mongodb://localhost:27017", "DatabaseName": "ProductDb_3", "ProductCollectionName": "Product_3" }, "AllowedHosts": "*" }

      2.擴(kuò)展類

      ///

      /// MongoDB擴(kuò)展方法 /// public static class MongoDBServiceCollectionExtensions { public static IServiceCollection AddMongoDB(this IServiceCollection services, IConfiguration Configuration) { // 1、獲取配置文件數(shù)據(jù) ProductMongoDBOptions productMongoDBOptions = (ProductMongoDBOptions)Configuration.GetSection(nameof(ProductMongoDBOptions)); // 1、建立MongoDB連接 var client = new MongoClient(productMongoDBOptions.ConnectionString); // 2、獲取商品庫 var database = client.GetDatabase(productMongoDBOptions.DatabaseName); // 3、獲取商品表(集合) var _products = database.GetCollection(productMongoDBOptions.ProductCollectionName); services.AddSingleton(_products); return services; } }

      3.注入擴(kuò)展類

      services.AddMongoDB();

      4.使用

      4.1 相關(guān)依賴

      public class Product { [BsonId] [BsonRepresentation(BsonType.ObjectId)] public string Id { set; get; } public string ProductCode { set; get; } //商品編碼 public string ProductUrl { set; get; } // 商品主圖 public string ProductTitle { set; get; } //商品標(biāo)題 public string ProductDescription { set; get; } // 圖文描述 public decimal ProductVirtualprice { set; get; } // 商品虛擬價格 public decimal ProductPrice { set; get; } //價格 public int ProductSort { set; get; } //商品序號 public int ProductSold { set; get; } //已售件數(shù) public int ProductStock { set; get; } //商品庫存 public string ProductStatus { set; get; } // 商品狀態(tài) public int score { set; get; } //商品級別 }

      public interface IProductService { void Create(Product Product); public void CreateList(List Products); IEnumerable GetProducts(); Product GetProductById(string id); public IEnumerable GetProductsByPage(int Page, int PageSize); public IEnumerable GetProductsBySort(Product product, int Page, int PageSize); public IEnumerable GetProductsByAggregation(Product product); void Update(string id,Product Product); public void UpdateList(string id, Product Product); // 更新字段 public void UpdateFiled(string id, ProductUpdateFiledDto productUpdateFiledDto); void Delete(Product Product); public void DeleteList(Product Product); bool ProductExists(string id); // 字段修改 public void Replace(string id, Product Product); // 創(chuàng)建索引 public string CreateIndex(); }

      ///

      /// 商品服務(wù)實(shí)現(xiàn) /// public class ProductService : IProductService { private readonly IMongoCollection _products; public ProductService( /* IMongoCollection products,*/ IConfiguration configuration/*,IOptions options*/) { // 1、建立MongoDB連接 //var client = new MongoClient("mongodb://localhost:27018,localhost:27019,localhost:27020"); var client = new MongoClient("mongodb://localhost:27000,localhost:27100"); // 2、獲取商品庫(自己創(chuàng)建商品數(shù)據(jù)) var database = client.GetDatabase("ProductDb"); // 3、獲取商品表(自己創(chuàng)建商品數(shù)) _products = database.GetCollection("Product"); // _products = products; } public void Create(Product Product) { _products.InsertOne(Product); } public void CreateList(List Products) { _products.InsertMany(Products); } public void Delete(Product Product) { _products.DeleteOne(product => product.Id == Product.Id); } public void DeleteList(Product Product) { _products.DeleteMany(product => product.Id == Product.Id); } public Product GetProductById(string id) { return _products.Find(product => product.Id == id).FirstOrDefault(); } public IEnumerable GetProducts() { return _products.Find(product => true).ToList(); } /// /// 商品不同字段獲取 /// /// public IEnumerable GetProductsFiled() { var filter = Builders.Filter; /* BsonDocument filter = new BsonDocument(); var collection = _mongoDatabase.GetCollection("ProductDb"); var s = collection.Find(filter).ToList(); using (var cursor = collection.FindAsync(filter).Result) { while (cursor.MoveNextAsync().Result) { var batch = cursor.Current; foreach (BsonDocument document in batch) { Console.WriteLine(document.ToJson()); } } }*/ return _products.Find(product => true).ToList(); } /*/// /// 商品數(shù)量查詢 /// /// /// public long GetCount(int Page, int PageSize) { var skip = (Page - 1) * PageSize; return _products.Count(); }*/ /// /// 商品分頁查詢 /// /// /// public IEnumerable GetProductsByPage(int Page,int PageSize) { var skip = (Page - 1) * PageSize; return _products.Find(x => true).Skip(skip).Limit(PageSize).ToList(); } /// /// 商品排序 /// /// /// public IEnumerable GetProductsBySort(Product product, int Page, int PageSize) { var skip = (Page - 1) * PageSize; return _products.Find(product => true).SortBy(product => product.ProductSort).ToList(); } /// /// 商品價格聚合查詢 /// /// /// public IEnumerable GetProductsByAggregation(Product product) { var filter = Builders.Filter; PipelineDefinition pipelineDefinitions = PipelineDefinition.Create("ProductPrice"); var ints = _products.Aggregate(pipelineDefinitions); while (ints.MoveNext()) { var test = ints.Current; return test; } return null; } /// /// 更新 /// /// /// public void Update(string id, Product Product) { var update = Builders.Update; _products.UpdateOne(product => product.Id == id, update.Set("ProductTitle", Product.ProductTitle)); } /// /// 更新字段(增加字段) /// /// /// public void UpdateFiled(string id, ProductUpdateFiledDto productUpdateFiledDto) { var update = Builders.Update; _products.UpdateOne(product => product.Id == id, update.AddToSet("ProductTest", productUpdateFiledDto.ProductLike)); } /// /// 批量更新 /// /// /// public void UpdateList(string id, Product Product) { var filter = Builders.Filter; var update = Builders.Update; _products.UpdateMany(product => product.ProductCode == Product.ProductCode, update.Set("ProductTitle", Product.ProductTitle)); } /// /// 創(chuàng)建索引 /// /// public string CreateIndex() { var indexKeys = Builders.IndexKeys; return _products.Indexes.CreateOne(indexKeys.Descending("ProductCode")); } // 原理 // 分片集群 // 分片復(fù)制集群 /// /// 替換 /// /// /// public void Replace(string id, Product Product) { _products.ReplaceOneAsync(x => x.Id == id, Product); } public bool ProductExists(string id) { Product product = _products.Find(product => product.Id == id).FirstOrDefault(); if (product != null) { return true; } return false; } }

      4.使用

      ///

      /// 商品控制器 /// [ApiController] [Route("Product")] public class ProductController : ControllerBase { private readonly ILogger _logger; private readonly IProductService _productService; public ProductController(ILogger logger, IProductService productService) { _logger = logger; _productService = productService; } /// /// 添加商品 /// /// /// [HttpPost] public ActionResult CreateProduct(Product product) { _productService.Create(product); return CreatedAtAction("GetProduct", new { id = product.Id }, product); } /// /// 批量添加商品 /// /// /// [HttpPost("ProductList")] public ActionResult CreateProductList(Product[] Products) { _productService.CreateList(Products.ToList()); return CreatedAtAction("GetProduct", Products); } /// /// 查詢商品列表 /// /// [HttpGet] public ActionResult> GetProducts() { return _productService.GetProducts().ToList(); } /// /// 商品單個商品 /// /// /// [HttpGet("{id}")] public ActionResult GetProduct(string id) { var product = _productService.GetProductById(id); if (product == null) { return NotFound(); } return product; } /// /// 商品分頁查詢 /// /// /// /// [HttpGet("Page")] public ActionResult> GetProductsByPage(int Page ,int PageSize) { return _productService.GetProductsByPage(Page, PageSize).ToList(); } [HttpGet("Aggregation")] public ActionResult> GetProductsByAggregation(Product product) { return _productService.GetProductsByAggregation(product).ToList(); } /// /// 修改商品 /// /// /// /// [HttpPut("{id}")] public IActionResult PutProduct(string id, Product product) { try { _productService.Update(id,product); } catch (Exception) { throw; } return NoContent(); } /// /// 修改商品 /// /// /// /// [HttpPut("UpdateField")] public IActionResult PutFieldProduct(string id, ProductUpdateFiledDto productUpdateFiledDto) { try { _productService.UpdateFiled(id, productUpdateFiledDto); } catch (Exception) { throw; } return NoContent(); } /// /// 商品文檔批量修改 /// /// /// /// [HttpPut("UpdateList")] public IActionResult PutProductList(string id, Product product) { try { _productService.UpdateList(id, product); } catch (Exception) { throw; } return NoContent(); } /// /// 刪除商品 /// /// /// [HttpDelete] public IActionResult DeletetProduct(Product product) { try { _productService.Delete(product); } catch (Exception) { throw; } return NoContent(); } // PUT: api/Products/5 [HttpPost("CreateIndex")] public IActionResult CreateIndex() { try { _productService.CreateIndex(); } catch (Exception) { throw; } return NoContent(); } }

      .NET MongoDB 分布式

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:寫給鮮棗課堂粉絲的一封信
      下一篇:使用 Python 和 PyQt 構(gòu)建批量文件重命名工具
      相關(guān)文章
      国产精品亚洲综合一区在线观看| 亚洲精品中文字幕无乱码麻豆| 亚洲真人无码永久在线| 亚洲看片无码在线视频| 4480yy私人影院亚洲| 亚洲精品无码不卡在线播放HE| 国产亚洲精品国看不卡| 国产成人精品曰本亚洲79ren| 亚洲AV无码乱码在线观看性色扶| 苍井空亚洲精品AA片在线播放| 亚洲国产av玩弄放荡人妇| 亚洲日韩乱码中文字幕| 亚洲日本一线产区和二线产区对比| 亚洲综合激情五月色一区| 在线观看亚洲AV每日更新无码| 97se亚洲国产综合自在线| 亚洲精品123区在线观看| 国产成人精品日本亚洲专| 亚洲精品美女网站| 亚洲日韩看片无码电影| 亚洲AV无码AV男人的天堂不卡| 性色av极品无码专区亚洲| 妇女自拍偷自拍亚洲精品| 亚洲精品和日本精品| 爱情岛论坛网亚洲品质自拍| 亚洲色成人网站WWW永久| 亚洲av综合色区| 91亚洲精品第一综合不卡播放| 亚洲精品美女久久久久9999| 亚洲国产精品网站久久| 7777久久亚洲中文字幕| 亚洲暴爽av人人爽日日碰| 日本亚洲欧美色视频在线播放| 另类图片亚洲校园小说区| 亚洲精品第一国产综合境外资源 | 亚洲国产精品专区| 国产精品亚洲片在线va| 亚洲国产综合AV在线观看| 亚洲成A人片在线观看无码3D| 在线亚洲人成电影网站色www| 亚洲AV无码专区国产乱码电影|