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

MongoDB學(xue)習(xi)筆記~根(gen)據子(zi)集(ji)合里(li)某(mou)個屬(shu)性排序

回到目錄

這個(ge)問(wen)題(ti)是(shi)這樣的(de),有(you)一個(ge)實(shi)體(ti)dog,里面有(you)集合屬(shu)(shu)(shu)性DogHistory,它里面有(you)一些自己的(de)屬(shu)(shu)(shu)性,其(qi)中一個(ge)是(shi)SortNum,主要用來進行排(pai)序(xu),而且這個(ge)排(pai)序(xu)可以影響主對象,即影響dog類,這個(ge)在mongodb里不容易實(shi)現,但(dan)也不是(shi)不能(neng)實(shi)現,我們需要分兩步考慮這個(ge)問(wen)題(ti),不過首(shou)先我們需要知道(dao),mongodb里不支持子集合對象的(de)子屬(shu)(shu)(shu)性排(pai)序(xu),但(dan)它支持子實(shi)體(ti)對象的(de)子屬(shu)(shu)(shu)性排(pai)序(xu)。

下面(mian)看(kan)一下數據(ju)結構

public class DogHistory
    {
        public bool IsHealth { get; set; }
        public Adderss Adderss { get; set; }
        public string HistoryName { get; set; }
        public string[] Foods { get; set; }
        public int SortNum { get; set; }
    }
    public class Dog : NoSqlEntity
    {
        public Des Des { get; set; }
        public string Title { get; set; }
        public string Type { get; set; }
        public string[] Foods { get; set; }
        public List<DogHistory> DogHistory { get; set; }
    }

其(qi)中Dog類子實體(ti)屬(shu)性Des,它里面有屬(shu)性sortNum,如果我們去(qu)排序(xu),那是完全沒有問題的(de),代(dai)碼如下

           Console.WriteLine("--------------------子實(shi)體對(dui)象");
            var model3 = MongoDbClient.MongoManager<Dog>.Instance
              .Find(Builders<Dog>.Filter.Eq("DogHistory.HistoryName", "毛仔"))
              .SortBy(i => i.Des.SortNum).ToList();
            model3.ToList().ForEach(i =>
            {
                Console.WriteLine(i.Title + ":" + i.Title + ",sort:" + i.Des.SortNum);
            });

但如果希望根據DogHistory集合里的某個屬性進行排序,那是不行的,雖然不行,但mongodb給出來了解決方案,對于(yu)集合類(lei)型(xing)可以通過索引下標的方(fang)式進行(xing)排序,這它是支持的

下(xia)面代碼展現(xian)了如何實(shi)現(xian)這種復雜的排序:

            var entityIndex = MongoDbClient.MongoManager<Dog>.Instance.Find(Builders<Dog>.Filter.Eq("DogHistory.HistoryName", "大毛")).FirstOrDefault();
            var index = entityIndex.DogHistory.FindIndex(i => i.HistoryName == "大毛");
            var model2 = MongoDbClient.MongoManager<Dog>.Instance
              .Find(Builders<Dog>.Filter.Eq("DogHistory.HistoryName", "大毛"))
              .SortBy(i => i.DogHistory[index].SortNum);
            model2.ToList().ForEach(i =>
            {
                Console.WriteLine(i.Title + ":" + i.DataStatus);
            });

結(jie)果與我們(men)預期(qi)的(de)(de)一樣,當然,如果是簡單(dan)的(de)(de)字符數(shu)(shu)組類型(xing),也(ye)是可以通過(guo)對(dui)數(shu)(shu)據下標元素排序的(de)(de),呵呵。

測試結果:

回到目錄

posted @ 2016-11-29 16:32  張占嶺  閱讀(4351)  評論(0)    收藏  舉報