mongodb 實戰 聚合 組內排序

2021-09-26 15:11:30 字數 1213 閱讀 6374

前言

今天遇到的需求,使得我需要在聚合分組中的組內進行排序。

網上搜尋了一番,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...