【愚公系列】2022年05月 .NET架构班 058-分布式中间件 .Net Core下使用Mongodb增删改查

网友投稿 648 2022-05-29

前言

mysql和mongdb区别:

Mongodb语法汇总如下:

# 插入 db.集合名称.insert(数据) #查找全部 db.集合名称.find() #查询一个 db.集合名称.findOne({userid:'01'}) db.集合名称.find().limit(3) # 修改文档 db.集合名称.update(条件,修改后数据) # 删除全部文档 db.集合名称.remove({}) # 删除指定文档 db.集合名称.remove({_id:'1'}) # 统计条数 db.集合名称.count() # 根据条件统计条数 db.集合名称.count({content:'内容'}) # 模糊查询 MongoDB的模糊查询是通过正则表达式的方式实现的。格式为:/模糊查询字符串/ db.集合名称.find({字段名称:/bug/}) # 匹配content中以‘太’开头的数据 db.集合名称.find({字段名称:/^太/}) # 大于 等于 小于 使用这些需要单独将该值再放入一个{}中 db.集合名称.find({ 字段名称 : { $gt: value }}) // 大于: field > value db.集合名称.find({ 字段名称 : { $lt: value }}) // 小于: field < value db.集合名称.find({ 字段名称 : { $gte: value }}) // 大于等于: field >= value db.集合名称.find({ 字段名称 : { $lte: value }}) // 小于等于: field <= value db.集合名称.find({ 字段名称 : { $ne: value }}) // 不等于: field != value //查询id字段在1和2 db.集合名称.find({字段名称:{$in:["1","2"]}}) //查询id字段不在1和2 db.集合名称.find({字段名称:{$nin:["1","2"]}}) //查询访问量大于等于1000 且小于2000的数据 db.集合名称.find({$and:[ {字段名称:{$gte:1000}} ,{字段名称:{$lt:2000} }]}) db.集合名称.find({$or:[ {字段名称:{$gte:1000}} ,{字段名称:{$lt:2000} }]}) //列值增长 db.集合名称.update({字段名称:"2"},{$inc:{visits:NumberInt(2)}})

一、.Net Core下使用Mongodb落地情况分析

1.批量添加

【愚公系列】2022年05月 .NET架构班 058-分布式中间件 .Net Core下使用Mongodb增删改查

情况1:当客户端通过电商微服务往MongoDB中添加商品数据的时候,如果一个个添加,添加效率会比较低。如何解决添加商品添加效率低的问题?

方案:批量添加

///

/// 商品控制器 /// [ApiController] [Route("Product")] public class ProductController : ControllerBase { private readonly IProductService _productService; public ProductController(IProductService productService) { _productService = productService; } /// /// 批量添加商品 /// /// /// [HttpPost("ProductList")] public ActionResult CreateProductList(Product[] Products) { _productService.CreateList(Products.ToList()); return CreatedAtAction("GetProduct", Products); } }

///

/// 商品服务实现 /// public class ProductService : IProductService { private readonly IMongoCollection _products; public ProductService() { // 1、建立MongoDB连接 var client = new MongoClient("mongodb://localhost:27017"); // 2、获取商品库(自己创建商品数据) var database = client.GetDatabase("ProductDB"); // 3、获取商品表(自己创建商品数) _products = database.GetCollection("Product"); } public void CreateList(List Products) { _products.InsertMany(Products); } }

2.条件查询

分析:当客户端通过电商微服务往MongoDB中添加商品数据的时候,商品数据已经被成功添加到MongoDB中。如何从MongoDB中查询商品数据?

方案:查询商品

///

/// 商品控制器 /// [ApiController] [Route("Product")] public class ProductController : ControllerBase { private readonly IProductService _productService; public ProductController(IProductService productService) { _productService = productService; } /// /// 商品单个商品 /// /// /// [HttpGet("{id}")] public ActionResult GetProduct(string id) { var product = _productService.GetProductById(id); if (product == null) { return NotFound(); } return product; } }

///

/// 商品服务实现 /// public class ProductService : IProductService { private readonly IMongoCollection _products; public ProductService() { // 1、建立MongoDB连接 var client = new MongoClient("mongodb://localhost:27017"); // 2、获取商品库(自己创建商品数据) var database = client.GetDatabase("ProductDB"); // 3、获取商品表(自己创建商品数) _products = database.GetCollection("Product"); } public Product GetProductById(string id) { return _products.Find(product => product.Id == id).FirstOrDefault(); } }

3.批量查询

情况1:当客户端通过电商微服务往MongoDB中查询商品的时候,一个一个查询,效率比较低,如何实现批量查询?

方案:批量查询

///

/// 商品控制器 /// [ApiController] [Route("Product")] public class ProductController : ControllerBase { private readonly IProductService _productService; public ProductController(IProductService productService) { _productService = productService; } /// /// 查询商品列表 /// /// [HttpGet] public ActionResult> GetProducts() { return _productService.GetProducts().ToList(); } }

///

/// 商品服务实现 /// public class ProductService : IProductService { private readonly IMongoCollection _products; public ProductService() { // 1、建立MongoDB连接 var client = new MongoClient("mongodb://localhost:27017"); // 2、获取商品库(自己创建商品数据) var database = client.GetDatabase("ProductDB"); // 3、获取商品表(自己创建商品数) _products = database.GetCollection("Product"); } public IEnumerable GetProducts() { return _products.Find(product => true).ToList(); } }

4.分页查询

情况2:当客户端通过电商微服务往MongoDB中查询商品的时候,批量查询很多数据,由于数据量过大,导致内存直接溢出。如何防止数据量过大,导致内存溢出的问题?

方案:分页查询

///

/// 商品控制器 /// [ApiController] [Route("Product")] public class ProductController : ControllerBase { private readonly IProductService _productService; public ProductController(IProductService productService) { _productService = productService; } /// /// 商品分页查询 /// /// /// /// [HttpGet("Page")] public ActionResult> GetProductsByPage(int Page ,int PageSize) { return _productService.GetProductsByPage(Page, PageSize).ToList(); } }

///

/// 商品服务实现 /// public class ProductService : IProductService { private readonly IMongoCollection _products; public ProductService() { // 1、建立MongoDB连接 var client = new MongoClient("mongodb://localhost:27017"); // 2、获取商品库(自己创建商品数据) var database = client.GetDatabase("ProductDB"); // 3、获取商品表(自己创建商品数) _products = database.GetCollection("Product"); } /// /// 商品分页查询 /// /// /// public IEnumerable GetProductsByPage(int Page,int PageSize) { var skip = (Page - 1) * PageSize; return _products.Find(x => true).Skip(skip).Limit(PageSize).ToList(); } }

5.数据删除

分析:当客户端通过电商微服务往MongoDB中添加商品的时候,数据量非常大,这个时候,客户端希望能够删除商品,如何删除商品?

方案:删除商品

///

/// 商品控制器 /// [ApiController] [Route("Product")] public class ProductController : ControllerBase { private readonly IProductService _productService; public ProductController(IProductService productService) { _productService = productService; } /// /// 删除商品 /// /// /// [HttpDelete] public IActionResult DeletetProduct(Product product) { try { _productService.Delete(product); } catch (Exception) { throw; } return NoContent(); } }

///

/// 商品服务实现 /// public class ProductService : IProductService { private readonly IMongoCollection _products; public ProductService() { // 1、建立MongoDB连接 var client = new MongoClient("mongodb://localhost:27017"); // 2、获取商品库(自己创建商品数据) var database = client.GetDatabase("ProductDB"); // 3、获取商品表(自己创建商品数) _products = database.GetCollection("Product"); } public void Delete(Product Product) { _products.DeleteOne(product => product.Id == Product.Id); } }

6.数据更新

分析:当客户端通过电商微服务往MongoDB中添加商品的时候,商品添加错误,希望能够修改商品,这个时候,客户端希望能够修改商品,如何修改商品?

方案:修改商品

///

/// 商品控制器 /// [ApiController] [Route("Product")] public class ProductController : ControllerBase { private readonly IProductService _productService; public ProductController(IProductService productService) { _productService = productService; } /// /// 修改商品 /// /// /// /// [HttpPut("{id}")] public IActionResult PutProduct(string id, Product product) { try { _productService.Update(id,product); } catch (Exception) { throw; } return NoContent(); } }

///

/// 商品服务实现 /// public class ProductService : IProductService { private readonly IMongoCollection _products; public ProductService() { // 1、建立MongoDB连接 var client = new MongoClient("mongodb://localhost:27017"); // 2、获取商品库(自己创建商品数据) var database = client.GetDatabase("ProductDB"); // 3、获取商品表(自己创建商品数) _products = database.GetCollection("Product"); } /// /// 更新 /// /// /// public void Update(string id, Product Product) { var update = Builders.Update; _products.UpdateOne(product => product.Id == id, update.Set("ProductTitle", Product.ProductTitle)); } }

.NET MongoDB 分布式

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:JaCoCo官方教程
下一篇:Python 类的相关知识
相关文章