前言
今天遇到的需求,使得我需要在聚合分組中的組內進行排序。
網上搜尋了一番,mongodb
並沒有組內排序的關鍵字。好像sql
有;
瞬間對mongodb
有點失望。
後來仔細想想,雖然資料庫層面沒有具體關鍵字
去實現,但是,我們可以在寫管道時,控制好順序是可以實現組內排序的;
假設我們現在有下面這樣的資料:
每個獎項名為一組,每組都有名次,希望按照這些名次進行排序。
雖然mongodb
並沒有提供組內排序的相應字段;
我們可以先對獎項名稱進行排序,這樣就把相同獎項都排列到一起了。
此時我們再對名次進行排序,這樣就實現了對組內的排序。
基於我的業務的完整的**
db.newfortune_best_analyst.aggregate([
},//},
},, organ_name:
, awardcode:
, awardname:
, ranking:
} },
},])
講解:
},
這個排序很關鍵,其會對獎項編號進行排序;
原本我是},
這麼寫的,
但是後面的ranking
在下個管道$group
分組中使用$addtoset
後,順序就會發生變化,
所以還不如不用。
_id:
之後,再按照獎項編號和名次進行分組,
但是此時得到資料,由於分組的原因,組內的順序變化了;
所以我們需要在最後再次進行排序,這樣就是我們想要的資料。
},
效果:
組內分組 通過一些技巧還是可以實現的;
第一步,把分組的主鍵都歸在一起,再去聚合排序,就可以;
關聯 聚合 組合
關聯 聚合 aggregation 以及組合 composition 的區別?涉及到uml中的一些概念 關聯是表示兩個類的一般性聯絡,比如 學生 和 老師 就是一種關聯關係 聚合表示 has a 的關係,是一種相對鬆散的關係,聚合類不需要對被聚合類負責,如下圖所示,用空的菱形表示聚合關係 從實現的角...
聚合,組合,依賴
1.聚合 是關聯關係的一種特例,體現的是整體與部分擁有的關係,即 has a 的關係,此時整體與部分之間可以分離。cpp view plain copy 學校 class school 學生 class student 可以看到 student 類中包含了乙個 school 類的物件 指標,而且在建...
UML 關聯 聚合 組合
聚合和組合都屬於關聯,處於聚合關係的兩個類生命週期不同步,則是聚合關係 處於組合關係的兩個類的生命週期同步。關聯可以有方向,可以是單向關聯,也可以是雙向關聯。關聯在c 中呈現為 class a class b a function1 b b 或a function1 b b 或a function1...