中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

MongoDB學(xue)習(xi)筆記~使用(yong)原生語句實現三層集合關系的更新

回到目錄

MongoDB的(de)文檔(dang)(dang)型數據(ju)結構使得它在(zai)存(cun)儲數據(ju)上(shang)很像JSON,在(zai)可讀(du)性方(fang)面(mian)很強,然而這(zhe)種復雜的(de)結構在(zai)update時相對麻煩一些,而對于官方(fang)給(gei)出的(de)文檔(dang)(dang)說的(de)也不夠(gou)細致(zhi),有些東(dong)西也是(shi)(shi)模棱兩可的(de)態(tai)度(du),對于多層(ceng)嵌(qian)套(tao)的(de)集合對象(xiang),實現(xian)update更(geng)是(shi)(shi)麻煩,而目(mu)前我們所(suo)驗證的(de)是(shi)(shi),原生語句(ju)最(zui)多支(zhi)持三層(ceng)集合對象(xiang),層(ceng)次再多就無法實現(xian)了(le)。

三層(ceng)(ceng)集(ji)合(he)關系對(dui)象代碼(ma)如下,其實是內嵌兩層(ceng)(ceng),算上實體,共三層(ceng)(ceng)集(ji)合(he)

對(dui)于(yu)這種結構,我們使用原生的(de)(de)語句是可以對(dui)OrderDetail這個層(ceng)次的(de)(de)對(dui)象進行更新的(de)(de),下面(mian)是我的(de)(de)做(zuo)法

1 通過三級(ji)(ji)(ji)id查詢一級(ji)(ji)(ji)大對象(Query.EQ)(包括所(suo)有二級(ji)(ji)(ji)和三級(ji)(ji)(ji))

  var query = Query.EQ("OrderList.OrderDetail._id", threeID);

2 通(tong)過(guo)SetFields過(guo)濾(lv)多余的二級對(dui)象

  var oo = mongoRepository.Collection.Find(query).SetFields("OrderList.$").FirstOrDefault();

3 對象查詢出(chu)來后(hou),三級對象列表只能通過遍歷(li)的(de)方法查詢出(chu)來,并對它進行賦值更新

   for (int i = 0; i < orderDetail.Count; i++)
        {
                if (orderDetail[i].Id == threeID)
                {
                    orderDetail[i].ProductName = "大占(zhan)占(zhan)修改(gai)了(le)訂單 2015-09-21";
                    break;       
                }
         }

好(hao)了(le),說(shuo)話了(le)步驟,再(zai)來看一下完整的代碼

        var threeID = ObjectId.Parse("55c012232683c8143c3b494d");
            var mongoRepository = new MongoDB.Data.Core.MongoOfficialRepository<Person>();
            var query = Query.EQ("OrderList.OrderDetail._id", threeID);
            var oo = mongoRepository.Collection.Find(query).SetFields("OrderList.$").FirstOrDefault();
            var update = new UpdateDocument();
            var OrderInfo = oo.OrderList.FirstOrDefault();
            var orderDetail = OrderInfo.OrderDetail;
            for (int i = 0; i < orderDetail.Count; i++)
            {
                if (orderDetail[i].Id == threeID)
                {
                    orderDetail[i].ProductName = "大占占修改了訂(ding)單 2015-09-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","大叔(shu)2015-09-21")
                                                    }};
                    mongoRepository.Collection.Update(query, update);

                    update = new UpdateDocument {{ "$set", 
                                                         new BsonDocument("OrderList.$.OrderDetail."+i,
                                                         new BsonDocument(orderDetail[i].ToDictionary()))
                                                    }};
                    mongoRepository.Collection.Update(query, update);
                    #endregion
                    break;
                }
            }

最后的(de)(de)(de)結果是我們希望(wang)看到的(de)(de)(de),性能比之前(qian)的(de)(de)(de)版本少(shao)了一層(二(er)次分類)遍歷(li),可(ke)以接受!

就大叔的性格來說,MongoDB的嵌(qian)套更新(xin)還會(hui)在研究,開發還會(hui)在繼(ji)續(xu),因為向4層的更新(xin)還沒有實現,呵呵,開發進行中...

回到目錄

posted @ 2015-09-22 10:00  張占嶺  閱讀(2465)  評論(0)    收藏  舉報