文章出處

回到目錄

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

下面看一下數據結構

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; }
    }

其中Dog類子實體屬性Des,它里面有屬性sortNum,如果我們去排序,那是完全沒有問題的,代碼如下

           Console.WriteLine("--------------------子實體對象");
            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給出來了解決方案,對于集合類型可以通過索引下標的方式進行排序,這它是支持的

下面代碼展現了如何實現這種復雜的排序:

            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);
            });

結果與我們預期的一樣,當然,如果是簡單的字符數組類型,也是可以通過對數據下標元素排序的,呵呵。

測試結果:

回到目錄


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()