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仓储进行的一些二次说明,感觉还是比较有必要的,呵呵.

回到目录

 

posted @   张占岭  阅读(3096)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.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进行分页
点击右上角即可分享
微信分享提示