MongoDB與Spring Boot完整使用指南

目錄

1. MongoDB基礎概念

什么是MongoDB?

核心概念對比

文檔結構示例

2. MongoDB的特點與優勢

主要特點

適用場景

3. MongoDB基本操作

基本CRUD操作

插入文檔

查詢文檔

更新文檔

刪除文檔

4. Spring Boot集成MongoDB

步驟1:添加依賴

步驟2:配置數據庫連接

5. 實體類定義

基礎實體類

嵌套對象類

6. Repository接口

基礎Repository

自定義Repository實現

7. Service層實現

8. Controller層實現

9. 配置文件設置

application.yml完整配置

MongoDB配置類

10. 高級操作

聚合查詢

事務支持

11. 最佳實踐

1. 索引優化

2. 數據驗證

3. 異常處理

12. 常見問題解決

問題1:連接超時

問題2:中文亂碼

問題3:日期格式問題

問題4:大數據量查詢性能問題

問題5:內存溢出

總結


1. MongoDB基礎概念

什么是MongoDB?

MongoDB是一個基于文檔的NoSQL數據庫,它將數據存儲為靈活的JSON樣式文檔,這意味著字段可以因文檔而異,數據結構可以隨時間變化。

核心概念對比

MongoDB關系型數據庫說明
DatabaseDatabase數據庫
CollectionTable集合/表
DocumentRow文檔/行
FieldColumn字段/列

文檔結構示例

{"_id": ObjectId("..."),"name": "張三","age": 25,"email": "zhangsan@example.com","hobbies": ["讀書", "游泳", "編程"],"address": {"city": "北京","street": "朝陽區"}
}

2. MongoDB的特點與優勢

主要特點

  • 文檔導向:使用JSON格式存儲數據
  • 無模式:同一集合中的文檔可以有不同的結構
  • 高性能:支持索引,查詢速度快
  • 高可用性:支持副本集
  • 水平擴展:支持分片

適用場景

  • 內容管理系統
  • 實時分析
  • 物聯網應用
  • 移動應用后端
  • 大數據處理

3. MongoDB基本操作

基本CRUD操作

插入文檔
// 插入單個文檔
db.users.insertOne({name: "張三",age: 25,email: "zhangsan@example.com"
})// 插入多個文檔
db.users.insertMany([{name: "李四", age: 30},{name: "王五", age: 28}
])
查詢文檔
// 查詢所有文檔
db.users.find()// 條件查詢
db.users.find({age: {$gte: 25}})// 查詢單個文檔
db.users.findOne({name: "張三"})
更新文檔
// 更新單個文檔
db.users.updateOne({name: "張三"},{$set: {age: 26}}
)// 更新多個文檔
db.users.updateMany({age: {$lt: 30}},{$inc: {age: 1}}
)
刪除文檔
// 刪除單個文檔
db.users.deleteOne({name: "張三"})// 刪除多個文檔
db.users.deleteMany({age: {$lt: 18}})

4. Spring Boot集成MongoDB

步驟1:添加依賴

pom.xml中添加MongoDB依賴:

<dependencies><!-- Spring Boot Starter Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring Boot Starter Data MongoDB --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency><!-- Spring Boot Starter Test --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
</dependencies>

步驟2:配置數據庫連接

application.yml中配置:

spring:data:mongodb:host: localhostport: 27017database: myapp# 如果有認證# username: admin# password: password

5. 實體類定義

基礎實體類

package com.example.entity;import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;import java.time.LocalDateTime;
import java.util.List;@Document(collection = "users") // 指定集合名稱
public class User {@Idprivate String id; // MongoDB會自動生成ObjectId@Field("user_name") // 自定義字段名稱private String name;private Integer age;private String email;private List<String> hobbies;private Address address; // 嵌套對象private LocalDateTime createTime;private LocalDateTime updateTime;// 構造方法public User() {}public User(String name, Integer age, String email) {this.name = name;this.age = age;this.email = email;this.createTime = LocalDateTime.now();this.updateTime = LocalDateTime.now();}// Getter和Setter方法public String getId() { return id; }public void setId(String id) { this.id = id; }public String getName() { return name; }public void setName(String name) { this.name = name;this.updateTime = LocalDateTime.now();}public Integer getAge() { return age; }public void setAge(Integer age) { this.age = age;this.updateTime = LocalDateTime.now();}public String getEmail() { return email; }public void setEmail(String email) { this.email = email;this.updateTime = LocalDateTime.now();}public List<String> getHobbies() { return hobbies; }public void setHobbies(List<String> hobbies) { this.hobbies = hobbies; }public Address getAddress() { return address; }public void setAddress(Address address) { this.address = address; }public LocalDateTime getCreateTime() { return createTime; }public void setCreateTime(LocalDateTime createTime) { this.createTime = createTime; }public LocalDateTime getUpdateTime() { return updateTime; }public void setUpdateTime(LocalDateTime updateTime) { this.updateTime = updateTime; }@Overridepublic String toString() {return "User{" +"id='" + id + '\'' +", name='" + name + '\'' +", age=" + age +", email='" + email + '\'' +", hobbies=" + hobbies +", address=" + address +", createTime=" + createTime +", updateTime=" + updateTime +'}';}
}

嵌套對象類

package com.example.entity;public class Address {private String city;private String street;private String zipCode;public Address() {}public Address(String city, String street, String zipCode) {this.city = city;this.street = street;this.zipCode = zipCode;}// Getter和Setter方法public String getCity() { return city; }public void setCity(String city) { this.city = city; }public String getStreet() { return street; }public void setStreet(String street) { this.street = street; }public String getZipCode() { return zipCode; }public void setZipCode(String zip

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

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

相關文章

swift開發,關于應用、頁面、視圖的生命周期

目錄一、應用生命周期&#xff08;App Lifecycle&#xff09;UIKit (AppDelegate)SwiftUI (使用 ScenePhase)二、頁面生命周期&#xff08;ViewController Lifecycle&#xff09;三、視圖生命周期&#xff08;UIView Lifecycle&#xff09;四、SwiftUI 視圖生命周期五、關鍵對比…

借助HarmonyOS SDK,《NBA巔峰對決》實現“分鐘級啟動”到“秒級進場”

《NBA巔峰對決》是由望塵科技推出的國內首個真實還原5V5王朝模式的操作籃球手游&#xff0c;提供流暢操作手感和真實籃球賽場體驗。豐富的玩法在為玩家帶來高質游戲體驗的同時&#xff0c;間接帶來了啟動流程冗長的問題&#xff0c;資源更新階段的等待感尤為突出。 “我們發現&…

HT-LINK ICE:海速芯32Gbps信號調理芯片,40dB補償+國產自主,打破高速互聯瓶頸!

HT-LINK ICE&#xff08;TENX海速芯&#xff09;產品解析與推廣文案一、產品定位HT-LINK ICE是TENX海速芯推出的高速信號調理芯片&#xff0c;專為PCIe 5.0/6.0、USB4、Thunderbolt等超高速接口設計&#xff0c;提供信號完整性增強和時鐘恢復功能&#xff0c;適用于數據中心、A…

深入剖析 ADL:C++ 中的依賴查找機制及其編譯錯誤案例分析

一、ADL 的定義與背景&#xff08;一&#xff09;ADL 的定義ADL&#xff08;Argument-Dependent Lookup&#xff0c;依賴查找&#xff09;是 C 中一種特殊的名稱查找機制&#xff0c;用于在調用函數時&#xff0c;根據函數參數的類型來確定查找的命名空間范圍。ADL 的核心思想是…

【科研繪圖系列】R語言繪制相關系數圖

文章目錄 介紹加載R包數據下載導入數據數據預處理畫圖系統信息參考介紹 【科研繪圖系列】R語言繪制相關系數圖 加載R包 library(vegan) library(dplyr)# install.packages("./RVisulizationData/003.mantel test/ggcor_0.9.8.1.tar.gz", repos = NULL, type = &quo…

pharokka phold--快速噬菌體注釋工具

pharokka是一款專用于噬菌體基因組及宏基因組的快速標準化注釋工具。PS.仍在積極更新中&#xff0c;最近一次更新是在今年6.20。 若需對細菌基因組進行快速標準化注釋&#xff0c;建議使用Bakta。啟發pharokka開發及命名的Prokka也是優秀選擇&#xff0c;但Bakta實為Prokka的卓…

深入淺出 Python Asynchronous I/O:從 asyncio 入門到實戰

在現代軟件開發中&#xff0c;性能是一個永恒的話題。特別是在處理網絡請求、文件讀寫等 I/O 密集型任務時&#xff0c;傳統的同步編程模型可能會因為等待而浪費大量時間。為了解決這個問題&#xff0c;異步編程應運而生。Python 通過內置的 asyncio 庫&#xff0c;為開發者提供…

OpenCV顏色矩哈希算法------cv::img_hash::ColorMomentHash

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 該類實現了顏色矩哈希算法&#xff08;Color Moment Hash&#xff09;&#xff0c;用于圖像相似性比較。它基于圖像在HSV顏色空間中的顏色矩統計特…

上海交大醫學院張維拓老師赴同濟醫院做R語言訓練營培訓

當前&#xff0c;醫學與人工智能的深度融合正迎來歷史性發展機遇。華中科技大學同濟醫學院附屬同濟醫院&#xff08;以下簡稱“同濟醫院”&#xff09;作為醫療人工智能應用的先行探索者&#xff0c;已在電子病歷輔助書寫、科研數據分析、醫療合同自動化審核等關鍵場景完成試點…

使用阿里云/騰訊云安裝完成mysql使用不了

顯示錯誤1130 - Host 106.228.110.117 is not allowed to connect to this MySQL server解決方案進入服務器的mysql命令行mysql -u root -p查看數據庫SHOW DATABASES;選擇mysql數據庫USE mysql;查看里面的表SHOW TABLES;查詢user表格的權限限制SELECT Host, User FROM user;將權…

第35周—————糖尿病預測模型優化探索

目錄 目錄 前言 1.檢查GPU 2.查看數據 ?編輯 3.劃分數據集 4.創建模型與編譯訓練 5.編譯及訓練模型 6.結果可視化 7.總結 前言 &#x1f368; 本文為&#x1f517;365天深度學習訓練營中的學習記錄博客 &#x1f356; 原作者&#xff1a;K同學啊 1.檢查GPU import torch.n…

接口(上篇)

接口&#xff08;上篇&#xff09;1.概念2.語法規則3.使用和特性4.實現多接口5.接口間繼承1.概念 接口就是公共的行為規范標準&#xff0c;大家在實現時&#xff0c; 只要符合規范標準&#xff0c;就可以通用。 在Java中&#xff0c;接口可以看成是&#xff1a;多個類的公共規…

UE5 源碼編譯setup.bat報錯

文章目錄編譯報錯改動說明小結更新編譯報錯 改動說明 因為需要整服務器&#xff0c;就編譯源碼&#xff0c;然后就遇到這個&#xff0c;很無語。這個問題一直存在&#xff0c;UE官方也不修復&#xff0c;也算是修復了&#xff0c;只是每次都要去重新下載替換下。也可以去問問d…

Linux下PCIe子系統(二)——PCIe子系統框架詳解

Linux下PCIe子系統&#xff08;二&#xff09;——PCIe子系統框架詳解 1. 概述 PCIe&#xff08;PCI Express&#xff09;子系統是Linux內核中負責管理PCI/PCIe設備的核心組件。它提供了一套完整的框架來發現、配置和管理PCI設備&#xff0c;實現了設備的即插即用和熱插拔功能。…

[特殊字符] LLM(大型語言模型):智能時代的語言引擎與通用推理基座

本文由「大千AI助手」原創發布&#xff0c;專注用真話講AI&#xff0c;回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我&#xff0c;一起撕掉過度包裝&#xff0c;學習真實的AI技術&#xff01; 從千億參數到人類認知的AI革命 &#x1f50d; 一、核心定義與核心特征…

18-C#改變形參內容

C#改變形參內容 1.ref 參數 int A100; add1(ref A) public int add1 (ref int x) {x x 10;return x; }2.out 參數 int A100; int B200; int Z; add3(A,B, out Z) public int add3 (int x&#xff0c;int y&#xff0c;int z) {z x y;return z; }

恒盾C#混淆加密大師最新版本1.4.0更新 - 增強各類加密效果, 提升兼容性, 使.NET加密更簡單

C#/.NET作為托管語言, 其編譯生成的EXE/DLL極易被反編譯工具還原源碼。據統計&#xff0c;大量的商業軟件曾遭遇過代碼逆向風險&#xff0c;導致核心算法泄露、授權被跳過. 因此對于C#語言開發的.NET程序來說, 在發布前進行混淆和加密非常有必要. 恒盾C#混淆加密大師作為一款.N…

數學建模:非線性規劃:二次規劃問題

一、定義如果規劃模型的目標函數是決策向量的二次函數&#xff0c;約束條件都是線性的&#xff0c;那么這個模型稱為二次規劃&#xff08;QP&#xff09;模型。二次規劃模型的一般形式為二、性質凸性判定準則二次規劃問題的凸性完全由Hessian矩陣H決定&#xff1a;??嚴格凸QP…

4. 那在詳細說一下 http 2.0 的特點

總結 二進制協議&#xff1a;文本通信改為二進制幀通信&#xff0c;數據可以劃分為更小的幀&#xff0c;便于高效解析和傳輸。多路復用&#xff1a;廢除 pipeline 管道&#xff0c;避免了“隊頭阻塞”問題。允許同一個 TCP 連接同時發送多個請求和協議&#xff0c;提高網絡資源…

Qt中遍歷QMap的多種方法及性能分析

Qt中遍歷QMap的多種方法及性能分析遍歷QMap的方法**1、使用迭代器&#xff08;STL風格&#xff09;****2、使用Java風格迭代器****3、使用C11范圍循環****4、使用鍵值分離遍歷**性能分析使用建議遍歷QMap的方法 1、使用迭代器&#xff08;STL風格&#xff09; QMap<QStrin…