Springboot與mongodb集成及聚合查詢

Spring Boot 與 MongoDB 的集成為開發者提供了一種簡便的方式來構建高性能、基于文檔的數據驅動應用程序。MongoDB 是一個非關系型數據庫(NoSQL),它使用 JSON 格式的文檔進行數據存儲,非常適合處理大量的、半結構化的數據。而 Spring Boot 則通過其自動配置和 Starter 項目簡化了應用開發過程。結合 Spring Data MongoDB,可以非常方便地在 Spring Boot 應用中實現對 MongoDB 的操作,包括復雜的數據聚合查詢。

1. 集成 Spring Boot 與 MongoDB

首先,確保你的開發環境中已經安裝了 MongoDB,并且正在運行。接下來,我們將在 Spring Boot 項目中集成 MongoDB。

添加依賴

pom.xml 文件中添加 Spring Boot Starter for MongoDB 的依賴:

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>
</dependencies>
配置 MongoDB

application.propertiesapplication.yml 中配置 MongoDB 的連接信息:

spring:data:mongodb:uri: mongodb://username:password@localhost:27017/databaseName

2. 使用 MongoTemplate 進行聚合查詢

MongoTemplate 是 Spring Data MongoDB 提供的一個主要類,用于執行數據庫操作,包括復雜的聚合查詢。以下是一些基本聚合查詢的示例。

準備工作

假設我們有一個 User 集合,包含用戶的姓名(name)、年齡(age)和注冊日期(registrationDate)字段。

public class User {@Idprivate String id;private String name;private int age;private Date registrationDate;// 省略構造器、getter 和 setter
}
聚合查詢示例
示例 1:計數

計算集合中的文檔總數:

long count = mongoTemplate.count(new Query(), User.class);
示例 2:分組統計

按年齡分組統計用戶數量:

Aggregation agg = Aggregation.newAggregation(Aggregation.group("age").count().as("userCount"));
AggregationResults<Document> results = mongoTemplate.aggregate(agg, "User", Document.class);
results.forEach(result -> System.out.println("Age: " + result.get("age") + ", Count: " + result.get("userCount")));

?

示例 3:匹配與排序

查找年齡大于 25 歲的用戶,并按年齡降序排序:

Aggregation agg = Aggregation.newAggregation(Aggregation.match(Criteria.where("age").gt(25)),Aggregation.sort(Sort.Direction.DESC, "age")
);
List<User> users = mongoTemplate.aggregate(agg, "User", User.class).getMappedResults();
示例 4:投影與限制

只獲取用戶名和年齡,限制結果數量為前 10 條:

Aggregation agg = Aggregation.newAggregation(Aggregation.project("name", "age"),Aggregation.limit(10)
);
List<Document> projectedUsers = mongoTemplate.aggregate(agg, "User", Document.class).getMappedResults();
示例 5:使用管道操作符(更復雜的聚合)

例如,找出每個年齡段的最年輕用戶:

Aggregation agg = Aggregation.newAggregation(Aggregation.group("age").first("name").as("youngestUser").min("registrationDate").as("oldestRegistrationDate"),Aggregation.sort(Sort.Direction.ASC, "_id")
);
AggregationResults<Document> results = mongoTemplate.aggregate(agg, "User", Document.class);
results.forEach(result -> System.out.println(result.toJson()));

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/21804.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/21804.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/21804.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mybatisplus 字段存的是json 在查詢的時候怎么映射成對象

數據庫交互對象 TableName(value "表名", autoResultMap true)TableField(typeHandler JacksonTypeHandler.class, value "user_info")private User user;autoResultMap 是一個 MyBatis-Plus 中的注解屬性&#xff0c;用于控制是否自動生成結果映射。…

部署metrics-server

kubeadm部署metrics-server 需求&#xff1a;生產環境是kubeadm部署的v1.22.2版本的k8s&#xff0c;統計資源時發現這套環境沒有部署metrics-server這個服務&#xff0c;今天來部署一下 1、在github社區找到這個項目并下載 rootjumpserver-cmcc:~# wget https://github.com/…

你需要知道關于 Java 線程一些最基本的事情

你好&#xff0c;我是 shengjk1&#xff0c;多年大廠經驗&#xff0c;努力構建 通俗易懂的、好玩的編程語言教程。 歡迎關注&#xff01;你會有如下收益&#xff1a; 了解大廠經驗擁有和大廠相匹配的技術等 希望看什么&#xff0c;評論或者私信告訴我&#xff01; 文章目錄 一…

百度云下載不限速方式集合

使用解析網站配合Motrix工具軟件 下載Motrix工具&#xff1a;Motrix下載鏈接打開解析網址&#xff1a;解析網站獲取&#xff0c;將百度網盤鏈接粘貼到解析網站&#xff0c;獲取下載鏈接。在Motrix中配置Aria2 RPC地址&#xff1a;ws://localhost:16800/jsonrpc開始下載&#x…

《SpringBoot3+Vue3實戰》系列文章目錄

前后端分離&#xff08;Frontend-Backend Separation&#xff09;是一種軟件架構設計模式&#xff0c;它將傳統的Web應用中的前端&#xff08;用戶界面&#xff09;和后端&#xff08;服務器邏輯和數據存儲&#xff09;從應用層面進行解耦&#xff0c;使得兩者可以獨立地開發、…

stm32標準庫usart1,usrat2,usart3三個串口的配置以及printf重定向(串口輸出)

我剛開始學串口時&#xff0c;因為要用到多個串口&#xff0c;自己又懶得改&#xff0c;總是在網上要找半天。下面將stm32的三個串口配置羅列下來&#xff0c;方便大家直接copy。 1、串口1 引腳&#xff1a;TX&#xff1a;PA9&#xff1b; RX&#xff1a;PA10&#xff1b; 重…

Deno入門:Node.js的現代替代品

Deno 作為 Node.js 的現代替代品&#xff0c;提供了許多改進和創新&#xff0c;尤其是在安全性、模塊系統和開發體驗方面。雖然它仍處于發展階段&#xff0c;但對于尋求簡潔、安全和現代化 JavaScript/TypeScript 開發環境的開發者來說&#xff0c;Deno 是一個值得考慮的選擇。…

【封裝】Unity切換場景不銷毀物體

在切換場景時&#xff0c;如果物體不需要銷毀&#xff0c;可以直接使用下方腳本 代碼 public class DontDestroyLoader : MonoBehaviour{ //所有不銷毀的物體預制體[SerializeField] private GameObject[] dontDestroyPrefabs;//實例化預制體public void Load(){foreach (var …

Linux CFS調度器簡介

文章目錄 前言一、概要二、實現2.1 簡介2.2 算法實現2.3 內核源碼 三、特點四、調度策略五、調度類參考資料 前言 早期的Linux調度器采用了簡化的設計&#xff0c;顯然并不針對具有許多處理器甚至超線程的大規模架構。Linux 1.2調度器使用循環隊列對可運行任務進行管理&#x…

flink實戰--大狀態任務調優指南

Flink 狀態(State)簡介 在 Flink 中,狀態管理是流處理應用的核心概念之一,它允許算子(operators)在處理事件時保持和操作狀態信息。在 Flink 中,狀態可以被視為算子的“記憶”,它使得算子能夠在處理無界流數據時保持對歷史數據的跟蹤。狀態可以是簡單的鍵值對,也可以是…

昆侖萬維官宣開源2000億稀疏大模型Skywork-MoE

6月3日&#xff0c;昆侖萬維宣布開源2千億稀疏大模型Skywork-MoE&#xff0c;性能強勁&#xff0c;同時推理成本更低。 據「TMT星球」了解&#xff0c;Skywork-MoE基于之前昆侖萬維開源的Skywork-13B模型中間checkpoint擴展而來&#xff0c;是首個完整將MoE Upcycling技術應用…

北京Profinet轉Modbus網關配置調試詳解

一、背景&#xff1a;在工業自動化系統中&#xff0c;PLC&#xff08;可編程邏輯控制器&#xff09;與流量計之間的通信是非常重要的&#xff0c;以確保數據準確傳輸并實現控制功能。然而&#xff0c;由于PLC和流量計可能采用不同的通信協議&#xff08;如Profinet和Modbus&…

探索Java的DNA-JVM字節碼深度解析

引言 在Java的世界里&#xff0c;JVM&#xff08;Java虛擬機&#xff09;是我們程序運行的心臟。而字節碼&#xff0c;作為JVM的血液&#xff0c;攜帶著程序的執行指令。今天&#xff0c;我們將深入探索Java字節碼的奧秘&#xff0c;一窺JVM如何將人類可讀的代碼轉化為機器可執…

洛谷 P1438 無聊的數列

題意 給定一個序列 A ( A 1 , A 2 , ? , A n ) A(A_1,A_2,\cdots,A_n) A(A1?,A2?,?,An?)。 現在進行 m m m次操作&#xff0c;分為以下兩種: 1 l r k d&#xff1a;給定一個長度為 r ? l 1 r-l1 r?l1的等差序列&#xff0c;首項為 k k k&#xff0c;公差為 d d d&am…

【小白向】微信小程序解密反編譯教程

# 前言 最近筆者有做到微信小程序的滲透測試&#xff0c;其中有一個環節就是對微信小程序的反編譯進行源碼分析&#xff0c;所謂微信小程序反編譯&#xff0c;就是將訪問的小程序進行反向編譯拿到部分源碼&#xff0c;然后對源碼進行安全審計&#xff0c;分析出其中可能存在的…

圖形學初識--顏色混合

文章目錄 前言正文為什么要有顏色混合&#xff1f;顏色混合常見實現方式&#xff1f;上述顏色混合注意點 結尾&#xff1a;喜歡的小伙伴點點關注贊哦! 前言 本章節補充一下顏色混合的內容&#xff0c;主要包含&#xff1a;為什么要有顏色混合&#xff1f;顏色混合常實現方式&a…

BGP——邊界網關路由協議

BGP -邊界網關路由協議 OSPF RIP EIGRP AS——自治系統 標準編號16位二進制 0-65535 1-64511公有 64512 -私有 擴展編號 32位二進制 動態路由協議: GP ——內部網關路由協議 —— AS之內 或企業網、局域網 RIP OSPF EIGRP EGP-外部網關路由協議 - …

Centos 7 安裝刻錄至硬件服務器

前言 在日常測試中&#xff0c;會遇到很多安裝的場景&#xff0c;今天給大家講一下centos 7 的安裝&#xff0c;希望對大家有所幫助。 一.下載鏡像 地址如下&#xff1a; centos官方鏡像下載地址https://www.centos.org/download/ 按照需求依次點擊下載 二.鏡像刻錄 鏡像刻…

idea springboot woff/woff2/eot/ttf/svg等小圖標不顯示的問題 - 第515篇

歷史文章&#xff08;文章累計500&#xff09; 《國內最全的Spring Boot系列之一》 《國內最全的Spring Boot系列之二》 《國內最全的Spring Boot系列之三》 《國內最全的Spring Boot系列之四》 《國內最全的Spring Boot系列之五》 《國內最全的Spring Boot系列之六》 《…