MongoDB学习笔记~自己封装的Curd操作(按需更新的先决条件)

我们上一讲中介绍了大叔封装的Mongo仓储,其中介绍了几个不错的curd操作,而对于按需更新内部子对象,它是有条件的,即你的子对象不能为null,也就是说,我们在建立主对象时,应该为子对象赋一下初值,即new一下它,呵呵.

正确的mongo集合

MongoDB学习笔记~自己封装的Curd操作(按需更新的先决条件)

对于赋过初值的子对象,在按需要更新时,有以下两种要注意一下

1 子对象的_id,如果已经存在,就更新它的值

2 子对象的_id,如果不存在,或者没有显示为_id赋值,则添加一条新的记录,即_id从新生成

而对于实体更新不存在这个问题,实体里的值会覆盖掉原表的值,下面看一下按需要更新的代码

            #region 按需更新
            repository1.Update<Person>(i => new Person
            {
                Id = "556d531e2683c818c86caddb",
                Address = new Address
                {
                    Id = "556d531e2683c818c86ca123",/*不加id(或者id没有在集合中存在)就是向列表添加一条元素,id存在则更新指定的元素*/
                    Province = "luanxian",
                    City = "111湖南占占大师",
                    District = "小区",
                    Seconds = 1
                },
                AddList = new List<Address>() { 
                   new Address
                     {
                         /*不加id(或者id没有在集合中存在)就是向列表添加一条元素,id存在则更新指定的元素*/
                         Id="556d531e2683c818c86cadde",
                         Province = "luanxian",
                         City = "湖南占占大师ddd",
                         District = "小区",
                         Seconds = 1 
                     }}
            });
            #endregion

对于整个更新,还是同样的问题,当然前提需要把表记录从库中获出来

           #region 完整更新
            var e1 = repository1.Find("556d531e2683c818c86caddb");
            e1.Name = "wet";
            e1.Address.City = "北京123";
            /*遍历原来的集合,批量赋值*/
            e1.AddList.ForEach(i =>
            {
                i.City = "大占占";
            });
            /*为每个对象分别赋值,不指定ID被自动生成*/
            e1.AddList = new List<Address> {
            new Address{City="占占1"},
            new Address{City="占占2"}
            };
            repository1.Update(e1);
            #endregion

对于MonoDB我们还需要继续去探索,研究...

本文转自博客园张占岭(仓储大叔)的博客,原文链接:MongoDB学习笔记~自己封装的Curd操作(按需更新的先决条件),如需转载请自行联系原博主。

上一篇:大话设计模式之设计原则


下一篇:MongoDB学习笔记~使用原生语句实现三层集合关系的更新