MongoDB学习笔记~自己封装的Curd操作(查询集合对象属性,更新集合对象)
我不得不说,mongodb官方驱动在与.net结合上做的不是很好,不是很理想,所以,我决定对它进行了二次封装,这是显得很必然了,每个人都希望使用简单的对象,而对使用复杂,麻烦,容易出错的对象尽而远之,这是正常的,人都是喜欢懒惰的,就像程序员,也是一样,喜欢偷懒,可能说,偷懒是程序员进步的一个标志,呵呵.
下面我是总结的几种标准的操作,主要是针对我封装的官方驱动而方的(MongoOfficialRepository<TEntity>)
1 插入对象和子对象
/// <summary> /// 添加对象 /// </summary> static public void Insert() { List<Person> list = new List<Person>(); for (int i = 0; i < 10; i++) { //添加新对象 list.Add(new Person { Address = new Address { City = "北京", District = "鸾翔凤集", Province = "luanxian", }, AddList = new List<Address> { new Address { Seconds=1, City = "湖北", District = "鸾翔凤集", Province = "luanxian", }, new Address { Seconds=1, City = "湖南", District = "小区", Province = "luanxian", } }, Age = 35, Birthday = DateTime.Now, LastContact = DateTime.Now, Name = "wangwu" }); } repository1.Insert(list); }
2 更新对象和子对象集合元素,这是非常不错的功能,对于没有必要更新的记录,可以不去为它赋值
/// <summary> /// 集合查询 /// </summary> static public void Update() { repository1.Update<Person>(i => new Person { Id = "556bfd1b2683c82060c2edd0", AddList = new List<Address> { new Address { Id = "556bfd1b2683c82060c2edd3", City = "占占大师123", District = "鸾翔凤集", Seconds=2 } } }); }
3 分页,多字段查询和排序,这是项目开发中用的最多的东西了,写了个标准的给大家参考
/// <summary> /// 分页,排序,查询 /// </summary> static public void Select() { //排序和检索 var m1 = repository1.GetModel(new { Address = new { City = "北京" }, AddList = new { Seconds = 1 } }, new { Name = OrderType.Desc }, 1, 20);
4 分组,对于需要按着按些字段进行聚合(统计,求和,总数,最大值,最小值等),及多条件查询,这里有不错的实例
/// <summary> /// 分组 /// </summary> static public PagedList<Person> Group(string keyword, int? age, int page) { Specification<Person> spec = new TrueSpecification<Person>(); //过滤 if (!string.IsNullOrWhiteSpace(keyword)) { spec &= new DirectSpecification<Person>(i => i.Name == keyword); } if (age.HasValue) { spec &= new DirectSpecification<Person>(i => i.Age == age); } //分组 var linq = from data1 in repository1.GetModel().Where(spec.SatisfiedBy()) group data1 by new { data1.Id, data1.Name } into g select new Person { Id = g.Key.Id, Name = g.Key.Name, Total = new Total { Count = g.Count(), Max = g.Max(i => i.Age), } }; return new PagedList<Person>(linq, page, 10); }
OK,以上是针对我的MongoDB仓储进行的一些二次说明,感觉还是比较有必要的,呵呵.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2012-06-01 事件之道~一 如何让实体发生更新时,同时记录它更新的内容到日志表
2011-06-01 项目中的通用查询参数类,它体现了项目架构的大局观
2011-06-01 MVC模式中,如何使用AJAX进行分页