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

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

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

      MongoDB學習筆記~官方驅動嵌套數組對象的更新

      回到目錄

      對于數組對象mongodb本身是支持的,不過對于數組的更新,mongodb的Csharp驅動目前只支持一級,即你的對象里包含數組,而數組又包括數組,這表示兩層,這在更新子數組時,Csharp驅動是不支持的,今天要說的就是如何讓它支持子數組的更新,下面是我給出的數據結構

      在Mongodb的Csharp驅動里,一般的更新方法如下

        update = new UpdateDocument {{ "$set",       
                                        new BsonDocument("OrderList.$.UserName","占占的訂單")
                                    }};
        mongoRepository.Collection.Update(query, update);

      上面代碼可以很快速的將指定的二級數組OrderList里的UserName字段更新,而如果你要更新OrderDetail就沒那么容易了,Csharp驅支目前是不支持的,當然你肯定會照著葫蘆畫飄,但結果是失敗的,就像下面的代碼(失敗,只有既望新版驅動了)

        update = new UpdateDocument {{ "$set",       
                                        new BsonDocument("OrderList.$.OrderDetail.ProductName","占占")
                                    }};
        mongoRepository.Collection.Update(query, update);

      結果是OrderDetail的ProductName沒有發生任何變化,呵呵。

      去找原因,去找資料,還好,找到了一個不錯的說法,即要想更新數組內的數組,需要將對上級數據進行定位,如OrderList.0.OrderDetail,這表示下標為0的OrderList數組元素(一個實體)下的OrderDetail數組對象,當然這個下標可不是那么輕易能得到的,

      我們需要對數組進行遍歷,找到滿足條件的后,進行break即可。

      var mongoRepository = new MongoDB.Data.Core.MongoOfficialRepository<Person>();
                  var query = Query.EQ("OrderList._id", twoID);
                  var oo = mongoRepository.Collection.Find(query).FirstOrDefault();
                  var update = new UpdateDocument();
                  bool isExit = false;
                  for (int j = 0; j < oo.OrderList.Count; j++)
                  {
                      var od = oo.OrderList[j].OrderDetail;
                      oo.OrderList[j].UserName = "大占占改呀";
                      for (int i = 0; i < od.Count; i++)
                      {
                          if (od[i].Id == threeID)
                          {
                              od[i].ProductName = "大占占修改了訂單21";
      
                              #region 先pull,再push
                              //update = new UpdateDocument {{ "$pull", 
                              //                                    new BsonDocument("OrderList."+j+".OrderDetail",
                              //                                    new BsonDocument("_id",threeID))
                              //                                 }};
                              //mongoRepository.Collection.Update(query1, update);
                              //update = new UpdateDocument {{ "$push", 
                              //                                 new BsonDocument("OrderList."+j+".OrderDetail",
                              //                                 new BsonDocument(od[i].ToDictionary()))
                              //                            }};
                              //mongoRepository.Collection.Update(query1, update);
                              #endregion
      
                              #region 直接set
                              update = new UpdateDocument {{ "$set",       
                                                               new BsonDocument("OrderList.$.UserName",oo.OrderList[j].UserName)
                                                          }};
                              mongoRepository.Collection.Update(query, update);
      
                              update = new UpdateDocument {{ "$set", 
                                                               new BsonDocument("OrderList."+j+".OrderDetail."+i,
                                                               new BsonDocument(od[i].ToDictionary()))
                                                          }};
                              mongoRepository.Collection.Update(query, update);
                              #endregion
                              isExit = true;
                              break;
                          }
                      }
                      if (isExit)
                          break;
                  }

      上面的代碼,我們看到了有兩種更新集合的方法,$pull和$push方法及$set方法,大家可以根據喜好進行選擇,都可以實現我們的目的,ToDictionary是我封裝的方法,意思是將類對象里的屬性轉換為字典,并做了mongodb的_id主鍵的處理,代碼如下

      /// <summary>
              /// 將對象屬性轉換為字典
              /// </summary>
              /// <param name="o"></param>
              /// <returns></returns>
              public static Dictionary<String, Object> ToDictionary(this object o)
              {
                  Dictionary<String, Object> map = new Dictionary<string, object>();
                  Type t = o.GetType();
                  PropertyInfo[] pi = t.GetProperties(BindingFlags.Public | BindingFlags.Instance);
                  foreach (PropertyInfo p in pi)
                  {
                      MethodInfo mi = p.GetGetMethod();
      
                      if (mi != null && mi.IsPublic)
                      {
                          if (p.Name == "Id")
                              map.Add("_id", mi.Invoke(o, new Object[] { }));
                          else
                              map.Add(p.Name, mi.Invoke(o, new Object[] { }));
                      }
                  }
                  return map;
              }
          }

      對于mongodb的探索,還在繼續...

      回到目錄

      posted @ 2015-08-03 16:47  張占嶺  閱讀(6212)  評論(1)    收藏  舉報
      主站蜘蛛池模板: www内射国产在线观看| 国产视频一区二区三区四区视频| 国产三级精品三级在线看| 精品久久久无码中文字幕| 精品中文人妻中文字幕| 四虎国产精品永久地址99| 亚洲熟女精品一区二区| 不卡一区二区国产在线| 精品黄色av一区二区三区| 中文字幕结果国产精品| AV无码不卡一区二区三区| 国产精品va无码一区二区| 人妻少妇偷人无码视频| 免费无码黄动漫在线观看| 99精品国产一区二区三 | 小雪被老外黑人撑破了视频| 商河县| 伊人中文在线最新版天堂| 2019国产精品青青草原| 97免费人妻在线视频| 无码日韩精品一区二区免费| 国产综合视频一区二区三区| 日韩熟女乱综合一区二区| 精品国产午夜福利伦理片| 少妇高潮惨叫喷水在线观看| 亚洲欧美日韩人成在线播放| 久热这里只有精品12| 在线亚洲高清揄拍自拍一品区| 巨熟乳波霸若妻在线播放| 国产特色一区二区三区视频 | 91老熟女老人国产老太| 视频二区国产精品职场同事 | 国产欧美另类久久久精品不卡| 亚洲综合久久精品哦夜夜嗨| 日韩精品av一区二区三区| www亚洲精品| 国产成人综合久久亚洲av| 国产最新AV在线播放不卡| 国内精品久久人妻无码妲| 国产乱码日韩亚洲精品成人| 亚洲高清免费在线观看|