<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      MongoDB學(xué)習(xí)筆記~對集合屬性的操作

      回到目錄

      $unset清除元素

      請注意在單個數(shù)組元素上使用$unset的結(jié)果可能與你設(shè)想的不一樣。其結(jié)果只是將元素的值設(shè)置為null,而非刪除整個元素。要想徹底刪除某個數(shù)組元素,可以用$pull 和$pop操作符。

      $addToSet和$push的區(qū)別

      該兩者的功能都是給數(shù)組添加一個值。但是兩者之間有區(qū)別,$addToSet要添加的值如果不存在才進(jìn)行添加操作,但是push只添加一個值;例如:

      tags = [“zzl”,”dudu”]

      如果執(zhí)行db.collection.update({},{$push:{tag:"laozhao"}}) 結(jié)果就是 [“l(fā)aozhao”,”zzl”,“dudu”]

      如果執(zhí)行db.collection.update({},{$addToSet:{tag:"zzl"}}) 結(jié)果不變

      關(guān)于Update.Combine集合更新注意點

      對于Update.Combine我們可以把需要更新的字段合并到列表List<UpdateDefinition<T>>()中,最后一起進(jìn)行更新,而這對于集合屬性來說,需要注意一下,我們需要為集合屬性元素使用PushEach進(jìn)行添加,而不是Push,因為使用Push會將前一個元素覆蓋掉,而只保留最后的元素(集合里的),所以需要使用PushEach來代替它,代碼如下:

              [TestMethod]
              public void Push()
              {
                  var filter = Builders<Dog>.Filter.Eq(i => i.Id, "5850b0bdebb91a3184f90d3d");
      
                  //更新所需要的字段
                  var updateList = new List<UpdateDefinition<Dog>>();
                  //更新需要集合類型的字段
                  var dogHistoryList = new List<DogHistory>();
                  //添加元素到集合屬性
                  dogHistoryList.Add(new DogHistory
                      {
                          HistoryName = "四虎子3",
                          IsHealth = false,
                          Adderss = new Adderss("廣東", "深圳", "沿海")
                      });
                  dogHistoryList.Add(new DogHistory
                  {
                      HistoryName = "四虎子4",
                      IsHealth = false,
                      Adderss = new Adderss("廣東", "深圳", "沿海")
                  });
                  //將需要更新集合對象添加到updateList里
                  updateList.Add(Builders<Dog>.Update.PushEach(i => i.DogHistory, dogHistoryList));
      
                  MongoDbClient.MongoManager<Dog>.Instance.UpdateOne(
                      filter,
                     Builders<Dog>.Update.Combine(updateList));
      
              }

      Update倉儲的優(yōu)化

      大叔對于這一點,也把它封裝到了Lind.DDD.Repositories.Mongo的倉儲里,完善了Update操作,修改了之前的遞歸處理邏輯,代碼反而更簡潔了,原理就是使用$set直接把原數(shù)據(jù)覆蓋即可。

              /// <summary>
              /// 版本二:遞歸構(gòu)建Update操作串
              /// 主要功能:實現(xiàn)List子屬性的push操作
              /// </summary>
              /// <param name="fieldList"></param>
              /// <param name="property"></param>
              /// <param name="propertyValue"></param>
              /// <param name="item"></param>
              /// <param name="father"></param>
              private void GenerateRecursionSet(
                        List<UpdateDefinition<TEntity>> fieldList,
                        PropertyInfo property,
                        object propertyValue,
                        TEntity item,
                        string father
                 )
              {
                  //復(fù)雜類型
                  if (property.PropertyType.IsClass && property.PropertyType != typeof(string) && propertyValue != null)
                  {
                      //集合
                      if (typeof(IList).IsAssignableFrom(propertyValue.GetType()))
                      {
                          var arr = propertyValue as IList;
                          if (arr != null && arr.Count > 0)
                          {
                              if (string.IsNullOrWhiteSpace(father))
                                  fieldList.Add(Builders<TEntity>.Update.Set(property.Name, arr));
                              else
                                  fieldList.Add(Builders<TEntity>.Update.Set(father + "." + property.Name, arr));
                          }
                      }
                      //實體
                      else
                      {
                          foreach (var sub in property.PropertyType.GetProperties(BindingFlags.Instance | BindingFlags.Public))
                          {
                              if (string.IsNullOrWhiteSpace(father))
                                  GenerateRecursionSet(fieldList, sub, sub.GetValue(propertyValue), item, property.Name);
                              else
                                  GenerateRecursionSet(fieldList, sub, sub.GetValue(propertyValue), item, father + "." + property.Name);
                          }
                      }
                  }
                  //簡單類型
                  else
                  {
                      if (property.Name != EntityKey)//更新集中不能有實體鍵_id
                      {
                          if (string.IsNullOrWhiteSpace(father))
                              fieldList.Add(Builders<TEntity>.Update.Set(property.Name, propertyValue));
                          else
                              fieldList.Add(Builders<TEntity>.Update.Set(father + "." + property.Name, propertyValue));
      
                      }
                  }
              }

      對于產(chǎn)生的結(jié)果是我們可以接受的,可以對集合屬性很方便的實現(xiàn)更新了。

                  dog.Des.Worker = new string[] { "engineer", "coder" };
                  dog.Des.Address = new List<Adderss>
                  {
                     new Adderss("beijing","fangshan","liangxiang",new string[]{"zhaojiaogan","Road100","No.300"}),
                     new Adderss("北京","大興","西紅門",new string[]{"理想城","大滿貫","4號樓"}),
                   };

      產(chǎn)生的結(jié)果如下

      以上數(shù)據(jù)結(jié)構(gòu)應(yīng)該算是比較復(fù)雜的了,像實體里有子實體,然后子實體里有集合,集合里又有數(shù)組,但我封裝的更新還是都適用的,這點已經(jīng)做過測試,請放心使用!

      歡迎大家繼續(xù)關(guān)注mongodb技術(shù)!

      繼續(xù)關(guān)注大叔博客!

      回到目錄

       

      posted @ 2016-12-14 11:58  張占嶺  閱讀(3254)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚州AV无码乱码精品国产| 人妻系列中文字幕精品| 伊人激情一区二区三区av| 亚洲中文字幕无码中字| 美女裸体十八禁免费网站| 亚洲综合网国产精品一区| 国产成熟妇女性视频电影| 固镇县| 亚洲一区二区中文av| 国内精品久久人妻无码网站| 日韩精品有码中文字幕| 色爱av综合网国产精品| 国产亚洲一二三区精品| 美女黄网站人色视频免费国产| 国产精品尤物乱码一区二区 | 欧产日产国产精品精品| 精品国产这么小也不放过| 精品国产成人国产在线视| 自拍亚洲一区欧美另类 | 国产精品午夜福利精品| 国产99久久亚洲综合精品西瓜tv | 亚洲国产成人久久77| 国产精品视频免费一区二区三区| 屁屁影院ccyy备用地址| 福利在线视频一区二区| 国产jlzzjlzz视频免费看| 宅男噜噜噜66网站高清| 亚洲成亚洲成网| 26uuu另类亚洲欧美日本| 男女做爰真人视频直播| 久久婷婷五月综合色和啪| 久久经精品久久精品免费观看| 国产亚洲国产精品二区| 国产成人理论在线视频观看| 国产精品国产三级国产a| 爆乳女仆高潮在线观看| 精品日韩亚洲AV无码| 国内精品人妻无码久久久影院导航| 国产精品自在拍首页视频| 大关县| 免费观看日本污污ww网站69|