日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

数据聚合Spring Data MongoDB:嵌套结果

發布時間:2023/12/3 javascript 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据聚合Spring Data MongoDB:嵌套结果 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1引言

在上一篇文章中,我們構建了聚合管道的基本示例。 如果您需要有關如何創建項目和配置應用程序的更多詳細信息,也許您想看看使用Spring Data MongoDB和Spring Boot進行數據聚合 。 在本文中,我們將重點研究一個用例,在這種情況下,將結果的一部分分組在一個嵌套對象中是有意義的。

我們的測試數據是足球運動員的集合,其中包含有關他們所屬的聯賽以及進球數的數據。 該文件將是這樣的:

@Document public class ScorerResults {@Idprivate final String player;private final String country;private final String league;private final int goals;public ScorerResults(String player, String country, String league, int goals) {this.player = player;this.country = country;this.league = league;this.goals = goals;}//Getters and setters }

知道每個聯賽打進多少球可能很有趣。 另外,誰是聯盟的最佳射手。 在下一節中,我們將不使用嵌套對象來實現第一個簡單示例。

您可以在我的Github存儲庫中找到所有這些示例的源代碼。

2基本示例

我們可以使用以下類來存儲每個聯賽的結果:

public class ScorerNotNestedStats {private String league;private int totalGoals;private String topPlayer;private String topCountry;private int topGoals;//Getters and setters }

為了檢索得分最高的得分手,我們首先需要按進球數對文件進行排序,然后按聯賽對它們進行分組。 在存儲庫中,通過以下方法實現管道的這兩個階段:

private SortOperation buildSortOpertation() {return sort(Sort.Direction.DESC, "goals"); }private GroupOperation buildGroupOperation() {return group("league").first("league").as("league").sum("goals").as("totalGoals").first("player").as("topPlayer").first("goals").as("topGoals").first("country").as("topCountry"); }

那應該做。 讓我們使用Spring的mongoTemplate匯總結果:

public List<ScorerNotNestedStats> aggregateNotNested() {SortOperation sortOperation = buildSortOpertation();GroupOperation groupOperation = buildGroupOperation();return mongoTemplate.aggregate(Aggregation.newAggregation(sortOperation,groupOperation), ScorerResults.class, ScorerNotNestedStats.class).getMappedResults(); }

如果我們檢索西班牙聯賽的統計數據,則會得到以下結果:

盡管這很公平,但是我對整個結果類中分散的所有頭號得分手的信息感到不滿意。 我認為,如果我們可以將所有計分員的數據封裝到一個嵌套對象中,那將更加有意義。 幸運的是,我們可以在聚合過程中直接做到這一點。

3嵌套結果

Spring Data的嵌套方法旨在在投影階段創建子文檔。 這將使我們能夠將頂級目標球類創建為輸出結果類的屬性:

ProjectionOperation projectionOperation = project("totalGoals").and("league").as("league").and("topScorer").nested(bind("name", "topPlayer").and("goals", "topGoals").and("country", "topCountry"));

在上面的行中,嵌套方法topscorer被嵌套,該嵌套文檔將包含有關當前聯賽最佳射手得分的所有數據。 使用bind方法(topPlayer,topGoals和topCountry)將其屬性映射到輸出類。

MongoTemplate的調用重用了我們先前的排序和分組操作,然后添加了投影操作:

return mongoTemplate.aggregate(Aggregation.newAggregation(sortOperation,groupOperation,projectionOperation ), ScorerResults.class, ScorerStats.class).getMappedResults();

執行此查詢將得到更緊湊的結果,所有最重要的進球者相關數據都包裝在其自己的類中:

4。結論

Spring Data MongoDB嵌套方法對于通過聚合查詢創建結構良好的輸出結果非常有用。 在聚合過程中執行此步驟有助于避免使用Java代碼對結果進行后處理。

我正在Google Plus和Twitter上發布我的新帖子。 如果您要更新新內容,請關注我。

翻譯自: https://www.javacodegeeks.com/2016/05/data-aggregation-spring-data-mongodb-nested-results.html

總結

以上是生活随笔為你收集整理的数据聚合Spring Data MongoDB:嵌套结果的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。