.net平台的MongoDB使用(一)

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: .net平台的MongoDB使用(一)

前言


最近花了点时间玩了下MongoDB.Driver,进行封装了工具库,平常也会经常用到MongoDB,因此写一篇文章梳理知识同时把自己的成果分享给大家。


本篇会设计到Lambda表达式的解析,有兴趣的同学也看看我之前写的《表达式树的解析》。


文章最后会给出源码下载地址。


MongoDB简介


MongoDB是一个基于分布式文件存储的非关系型数据库,相比于其他NoSql它支持复杂的查询。


文本是类似JSON的BSON格式,BSON是在JSON的基础上进化:更快的遍历、操作更简易、更多的数据类型。因此MongoDB可以存储比较复杂的数据类型,同样也支持建立索引。


MongoDB的概念有:

  • DataBase(库)
  • Collections(集合),类似于关系型数据库的表
  • Document(文档),类似于关系型数据库的一条数据

  

image.png


MongoDB优缺点


  • 优点
  1. 高效性,内置GridFS,从而达到海量数据存储,并且满足大数据集的快速范围查询。
  2. 高扩展性,分片使MongoDB的有更高的吞吐量,复制使MongoDB更高的可用性。
  3. BSON文档,易于理解、查看,
  4. 免费


  • 缺点
  1. 不支持事务
  2. 不支持表关联
  3. 不耗CPU却耗内存
  4. 没有成熟的管理工具


MongoDB使用场景


拥有高效的存储的特点,让MongoDB用在操作日志记录是非常流行的做法。


随着版本的升级提供更加强大的功能,产品逐渐成熟用在主业务也很多,例如电商行业的订单系统与包裹跟踪模块,海量的主订单与订单明细,包裹的状态变更信息。


然而因为BSON文档的存储方式,使平常的开发的思维模式有所变更。举个栗子,传统用关系型数据库,订单模块就会分主订单表和订单明细表,创建订单就会用事务同时添加两表的数据,查找订单也会通过两表关联查询出来。但是使用MongoDB,主订单表与其明细,将会以一个完整的对象保存为文档。


也因为不支持事务、表关联的原因,它更加适合用作于一个完整的业务模块。


部分朋友会带着一个问题,非关系型数据库和关系型数据库哪个更好。我认为,谁都无法代替谁,一般情况下,非关系型数据库更多的作为关系型数据库扩展,用好了效果甚佳,滥用了只会寸步难行。


  image.png

MongoDB安装


本来想写的,相应的文章在园子太多了,借用一位仁兄的博文,传送门


MongoDB下载地址:https://www.mongodb.com/download-center#community


管理工具:Robomongo,传送门


MongoDB.Driver的使用


  image.png


创建一个控制台,到Nuget下载MongoDB.Driver。写入以下代码:


1 using System;
 2 using FrameWork.MongoDB.MongoDbConfig;
 3 using MongoDB.Bson.Serialization.Attributes;
 4 using MongoDB.Driver;
 5 
 6 namespace FrameWork.MongoDb.Demo
 7 {
 8     class Program
 9     {
10         static void Main(string[] args)
11         {
12             var database = "testdatabase";
13             var collection = "TestMongo";
14             var db = new MongoClient("您的地址").GetDatabase(database);
15             var coll = db.GetCollection<TestMongo>(collection);
16 
17             var entity = new TestMongo
18             {
19                 Name = "SkyChen",
20                 Amount = 100,
21                 CreateDateTime = DateTime.Now
22             };
23 
24             coll.InsertOneAsync(entity).ConfigureAwait(false);
25 
26         }
27     }
28 
29     public class TestMongo : MongoEntity
30     {
31 
32         [BsonDateTimeOptions(Kind = DateTimeKind.Local)]
33         public DateTime CreateDateTime { get; set; }
34 
35         public decimal Amount { get; set; }
36 
37         public string Name { get; set; }
38 
39     }
40 }

  

第一个demo:添加数据就完成了。F12可以看到IMongoCollection这个接口,增删改查都有,注意分One和Many。基础的使用就不扯过多,在文章尾部的代码已经提供增删改查的封装。


增删查的封装相对简单,但是MongoDB.Driver提供的update的稍微比较特殊。通过Builders<T>.Update.Set(_fieldname, value)更新指定字段名,有多个字段名需要修改,就要通过new UpdateDefinitionBuilder<T>().Combine(updateDefinitionList)去完成


image.png


然而,这种方式并不适用于我们实际开发,因此需要对Update方法进行 实体更新封装Lambda更新封装。

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
6月前
|
存储 NoSQL Unix
.NET生成MongoDB中的主键ObjectId
.NET生成MongoDB中的主键ObjectId
106 5
.NET生成MongoDB中的主键ObjectId
|
17天前
|
存储 设计模式 编解码
.NET 8.0 通用管理平台,支持模块化、WinForms 和 WPF
【11月更文挑战第5天】本文分析了.NET 8.0 通用管理平台在模块化、WinForms 和 WPF 方面的优势。模块化设计提升了系统的可维护性和可扩展性,提高了代码复用性;WinForms 提供了丰富的控件库和简单易用的开发模式,技术成熟稳定;WPF 支持强大的数据绑定和 MVVM 模式,具备丰富的图形和动画功能,以及灵活的布局系统。
|
1月前
|
NoSQL Ubuntu Linux
Linux平台安装MongoDB
10月更文挑战第11天
43 5
|
1月前
|
NoSQL Shell MongoDB
Mac OSX 平台安装 MongoDB
10月更文挑战第11天
21 4
|
1月前
|
NoSQL Shell MongoDB
Windows 平台安装 MongoDB
10月更文挑战第10天
46 0
Windows 平台安装 MongoDB
|
3月前
|
开发者 API Windows
从怀旧到革新:看WinForms如何在保持向后兼容性的前提下,借助.NET新平台的力量实现自我进化与应用现代化,让经典桌面应用焕发第二春——我们的WinForms应用转型之路深度剖析
【8月更文挑战第31天】在Windows桌面应用开发中,Windows Forms(WinForms)依然是许多开发者的首选。尽管.NET Framework已演进至.NET 5 及更高版本,WinForms 仍作为核心组件保留,支持现有代码库的同时引入新特性。开发者可将项目迁移至.NET Core,享受性能提升和跨平台能力。迁移时需注意API变更,确保应用平稳过渡。通过自定义样式或第三方控件库,还可增强视觉效果。结合.NET新功能,WinForms 应用不仅能延续既有投资,还能焕发新生。 示例代码展示了如何在.NET Core中创建包含按钮和标签的基本窗口,实现简单的用户交互。
72 0
|
5月前
|
存储 NoSQL API
Wells Fargo 借助 MongoDB 推出下一代银行卡支付平台
借助 MongoDB,Wells Fargo 快速启动了其传统大型主机现代化并且完全有能力继续创新,为消费者提供下一代金融服务
5392 2
|
6月前
|
数据采集 存储 监控
.NET智慧手术室管理平台源码
术前访视记录单、手术风险评估表、手术安全核查表、自费药品或耗材、麻醉知情同意书、麻醉记录单、分娩镇痛记录单、麻醉复苏单、术后镇痛记录单、术后访视记录单、压伤风险评估量表、手术清点记录单、护理记录单、输血护理记录单。
121 0
|
6月前
深入.net平台的分层开发
深入.net平台的分层开发
|
6月前
|
Web App开发 开发框架 .NET
asp.net基于WEB层面的区域云LIS系统平台源码
asp.net基于WEB层面的区域云LIS系统平台源码
75 1

热门文章

最新文章

下一篇
无影云桌面