MongoDB入門學習(含JAVA客戶端)

0.序章

致命的面試問題:為什么使用MongoDB?

大型的分布式的文檔型數據庫,也是NoSQL數據庫(例如 redis)

MongoDB適合數據量大而價值又低的這種數據(播放進度、評論、彈幕,實時數據的CRUD)

因為數據量大,所以不適合用redis,因為redis內存沒這么大;

因為價值低,量又大,所以不適合存儲在MySQL中;

1.MongoDB的相關概念

常識性的內容(類比MySQL學習):

MongoDB:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??MySQL:

database 數據庫? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????????????????? database數據庫

collection 集合(建議結構一樣) ????????????????????????table表(數據結構必須相同)

Document文檔(json BSON Binarry-Json)???????row行

field字段 ??????????????????????????????????????????????????????????????column列

_id 主鍵 ???????????????????????????????????????????????????????????????id主鍵

一個數據庫可以有多個集合,一個集合可以保存多條Document。


2.安裝過程(在docker環境中):

mkdir -p /opt/mongo/data/dbdocker load < /opt/mongo.tardocker run -d --restart=always -p 27017:27017 --name mongodb -v /opt/mongo/data/db:/data/db mongo:8.0-rc

3.命令行

數據庫(database)

# 查看數據庫
show dbs# 切換或者新增庫(懶加載,當數據庫中有集合或者數據時,才會真實創建)
use {dbName}# 刪除庫
db.dropDatabase()

集合(collection)

# 創建集合(不是必須操作,操作數據時如果集合不存在則自動創建)
db.createCollection("colName")# 查看集合  
show collections# 刪除集合
db.{colName}.drop()

文檔(Document)

# 新增 insert(過期) save(移除)   insertOne insertMany
db.{colName}.insertOne({k1:v1,k2:v2})
db.{colName}.insertMany([{k1:v1,k2:v2}, {k1:v1,k2:v2}, {k1:v1,k2:v2}])# 查詢所有
db.{colName}.find()# 基本查詢:等值
db.{colName}.find({k: v, k: v})# 不等值查詢:like($regex) >($gt) <($lt) >=($gte) <=($lte) !=(ne)
db.{colname}.find({k: {$regex: v}})
db.{colName}.find({k: /v/})# or查詢:或者關系
db.{colName}.find({$or: [{k: v}, {k: v}]})# 排序
db.{colName}.find().sort({key: 1/-1})# 分頁
db.{colName}.find().skip((pageNum-1))*pageSize).limit(pageSize)# 更新
db.{colName}.updateOne({查詢條件}, {$set: {k: v, k: v}})# 刪除
db.{colName}.deleteOne({k: v})
db.{colName}.deleteMany({k: v})
db.{colName}.deleteMany({})

4.Java客戶端

UI客戶端

官方提供的GUI客戶端:MongoDB Compass

Java客戶端

SpringData-MongoDB

引入依賴:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

配置:

# mongodb的配置
spring.data.mongodb.uri=mongodb://ip:port/dbNamespring.data.mongodb.host=192.168.30.100
spring.data.mongodb.port=27017
spring.data.mongodb.database=demo

代碼:

@SpringBootTest
public class MongoTest {@Autowiredprivate MongoTemplate mongoTemplate;@Testvoid test(){this.mongoTemplate.createCollection("collection1");}
}

實際操作過程:

  1. 引入依賴

  2. 配置

  3. 編寫實體類:pojo類

    @Document:作用在類上,標記對應的MongoDB的集合名稱

    @Id:作用在主鍵字段上,建議一定要有一個字段聲明為id,_id

    @Field:可以省略,除非字段名不一致

@Document("user")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {@Id // 建議一定要有一個字段定義為id,對應到_idLong id;@Field("username") // 該注解可以省略,如果字段名和MongoDB中字段名不一致,才需要指定String name;Integer age;Boolean gender;String pwd;
}

4.mongoTemplate實現文檔的CRUD:數據庫和集合都可以不用顯式創建

	// 新增一個 批量新增@Testvoid testInsert(){this.mongoTemplate.insert(new User(1L, "柳巖", 20, false, "123456"));}// 更新@Testvoid testUpdate(){
//        UpdateResult result = this.mongoTemplate.updateFirst(UpdateResult result = this.mongoTemplate.updateMulti(
//                Query.query(Criteria.where("age").gte(33)),Query.query(Criteria.where("name").regex("小")),Update.update("age", 30),User.class);System.out.println(result.getMatchedCount());System.out.println(result.getModifiedCount());}// 刪除@Testvoid testDelete(){DeleteResult result = this.mongoTemplate.remove(Query.query(Criteria.where("age").lte(23)), User.class);System.out.println(result.getDeletedCount());}

5.查詢條件:

this.mongoTemplate.find(Query對象)
Query對象的初始化:Query.query(Criteria)
Criteria對象的初始化:Criteria.where("key").is/gt/gte/lt/lte/ne/regex("value").and("key1").is("value1")
排序:Query.query().with(Sort.by(Order.asc/desc("key")))
分頁:Query.query().skip((pageNum-1)*pageSize).limit(pageSize)
        this.mongoTemplate.find(Query.query(Criteria.where("age").lte(30)
//                .andOperator(Criteria.where("age").lte(34))  // 同一個字段使用多次,需要andOperator.and("name").regex("小") // 如果是不同字段,一直向后進行and操作.and("pwd").is("123456").orOperator(Criteria.where("name").regex("小")) // 得出的交集不是并集。), User.class).forEach(System.out::println);// 排序this.mongoTemplate.find(Query.query(Criteria.where("name").regex("小")).with(Sort.by(Sort.Order.asc("age"))).skip(8).limit(4).with(PageRequest.of(2, 4)) // 頁碼從0開始, User.class).forEach(System.out::println);

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

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

相關文章

RedisCache與StringRedisTemplate的深度對比

1. 基本概念 RedisCache ??定位??&#xff1a;自定義封裝的Redis緩存工具類??特點??&#xff1a;通常針對業務場景進行了高層抽象??典型功能??&#xff1a; 帶過期時間的緩存操作自定義序列化方式業務鍵前綴管理簡化常用操作API StringRedisTemplate ??定位…

HOOPS Visualize技術詳解(二):3D圖形系統HOOPS/3DGS的段結構與屬性機制

在工業級三維可視化領域中&#xff0c;HOOPS Visualize憑借其高性能和模塊化設計被廣泛應用于CAD、CAM、仿真、BIM等工程軟件中。其中&#xff0c;HOOPS 3D Graphics System&#xff08;簡稱HOOPS/3DGS&#xff09;是HOOPS Visualize的核心組件&#xff0c;承擔著圖形場景管理、…

隨機化在臨床試驗中的應用與挑戰

一、隨機化的核心目的 1.1 控制混雜偏倚 1.1.1 平衡預后因素 確保已知/未知預后因素在組間分布均衡,避免基線不平衡影響結果。 1.1.2 避免選擇偏倚 防止研究者或患者主觀選擇分組,保障組間差異歸因于干預。 1.2 保障統計推斷有效性 1.2.1 滿足獨立性假設 滿足統計檢驗…

在C++中#pragma“可選預處理指令的作用“。

文章目錄 1. 標準定位&#xff1a;2. 語法形式&#xff1a;3. 常見用途舉例4. 為什么用 #pragma&#xff1f;5. 宏里用 __pragma / _Pragma6. 常見誤區 在 C/C 里&#xff0c;#pragma 本質上是“可選預處理器指令”&#xff0c;用來告訴編譯器在編譯某段代碼時啟用或關閉某些特…

windows系統中docker數據遷移出系統盤

1、關閉docker 2、移動docker數據 找到docker數據目錄&#xff0c;一般在C:\Users\61050\AppData\Local\Docker文件&#xff0c;將整個docker目錄復制到其他盤&#xff08;例如 D:\Docker&#xff09;&#xff0c;為保證不出錯&#xff0c;可以先提前復制一份。 3、創建符號鏈…

win11電腦突然休眠問題排查

WinR, 輸入eventvwr.msc打開事件查看器。找到出現問題的時間點那條數據。會顯示原因。首先還是要先排查原因。再去猜測。我因為猜測就直接去了科技市場掃灰加硅來了一個遍。另外還買了散熱風扇和金屬支架。雖然不知道有沒有必要。但是別人是很原因。到頭來早上還是發現自動休眠…

安卓開發 lambda表達式

第一步&#xff1a;初學者代碼 (沒有 Lambda 的“舊”方法) 假設我們有一個簡單的需求&#xff1a;執行一個耗時的計算&#xff08;比如網絡請求&#xff09;&#xff0c;并在計算完成后&#xff0c;通過一個“回調”來通知我們結果。 1. 定義一個回調接口 這個接口只有一個…

JMeter中變量如何使用?

在性能測試的世界中&#xff0c;Apache JMeter是一把利器&#xff0c;憑借其強大的可擴展性與圖形化操作界面&#xff0c;在工業界和開源社區中廣受青睞。而“變量的使用”作為JMeter中提高測試靈活性、可維護性和復用性的關鍵技術點&#xff0c;卻常常被初學者忽略或誤用。本文…

印度和澳洲的地理因素

研究表明&#xff0c;氣溫每升高1℃&#xff0c;勞動生產率可能下降1.5%至3%&#xff0c;甚至更多。印度大部分地區夏季高溫且濕度較大&#xff0c;有地方60多度&#xff0c;嚴重限制了勞動效率和農業產出。若印度整體地理位置北移約300公里&#xff0c;平均氣溫將降低&#xf…

3D Gaussian Splatting

3D高斯濺射&#xff08;3D Gaussian Splatting &#xff09;是一種基于顯式三維高斯分布的場景表示與渲染方法。與傳統的三維重建技術&#xff08;如多邊形網格、點云或隱式神經輻射場NeRF&#xff09;不同&#xff0c;3DGS將場景表示為大量帶有屬性的3D高斯橢球的集合&#xf…

鴻蒙5:布局組件

注意&#xff1a;博主有個鴻蒙專欄&#xff0c;里面從上到下有關于鴻蒙next的教學文檔&#xff0c;大家感興趣可以學習下 如果大家覺得博主文章寫的好的話&#xff0c;可以點下關注&#xff0c;博主會一直更新鴻蒙next相關知識 專欄地址: https://blog.csdn.net/qq_56760790/…

Flink狀態和容錯-基礎篇

1. 概念 flink的狀態和容錯繞不開3個概念&#xff0c;state backends和checkpoint、savepoint。本文重心即搞清楚這3部分內容。 容錯機制是基于在狀態快照的一種恢復方式。但是狀態和容錯要分開來看。 什么是狀態&#xff0c;為什么需要狀態&#xff1f; 流計算和批計算在數…

【若依學習記錄】RuoYi后臺手冊——分頁實現

目錄 若依系統簡介 前端調用實現 前端調用舉例 后臺邏輯實現 若依系統簡介 RuoYi 是一個基于 Spring Boot、Apache Shiro、MyBatis 和 Thymeleaf 的后臺管理系統&#xff0c;旨在降低技術難度&#xff0c;助力開發者聚焦業務核心&#xff0c;從而節省人力成本、縮短項目周…

從臺式電腦硬件架構看前后端分離開發模式

在軟件開發領域,前后端分離早已成為主流架構設計理念。它將系統的業務邏輯處理與用戶界面展示解耦,提升開發效率與系統可維護性。有趣的是,我們日常生活中常見的臺式電腦硬件架構,竟與這一理念有著異曲同工之妙。今天,就讓我們從臺式電腦的硬件組成出發,深入探討其與前后…

可觀測性的哲學

在現代系統架構中&#xff0c;“可觀測性&#xff08;Observability&#xff09;”已不僅僅是一個工程實踐&#xff0c;是一種關于“理解世界”的哲學姿態, 還是一種幫助架構演變的認知工具。從柏拉圖的“洞穴寓言”出發&#xff0c;我們可以構建起一條從被動接受投影&#xff…

開疆智能CCLinkIE轉ModbusTCP網關連接傲博機器人配置案例

本案例是通過CClinkIE轉ModbusTCP網關&#xff0c;連接傲博機器人的配置案例 PLC配置 打開三菱PLC組態軟件GXWORK3設置CClinkIE一側的參數配置&#xff0c;首先設置PLC的IP地址 雙擊詳細設置進入CClinkIE配置 添加通用從站IP地址以及占用點數 設置好分配的軟元件&#xff0c;確…

Bash Shellshock

CVE-2014-6271(Bash Shellshock遠程命令注入漏洞) 該服務啟動后有路徑http://your-ip:port/victim.cgi和http://your-ip:port/safe.cgi。其中safe.cgi是新版頁面&#xff0c;victim是bash4.3生成的頁面。 漏洞位置在User-Agent中victim.cgi: User-Agent: () { foo; }; echo C…

以軟件系統開發為例,解釋PMO 與IPD、CMMI、項目管理什么區別和聯系

以「開發一套智能倉儲管理系統&#xff08;WMS&#xff09;」為例&#xff0c;拆解軟件項目經理視角下的IPD、CMMI、項目管理和PMO如何協同運作&#xff1a; 場景設定 項目目標&#xff1a;6個月內交付WMS系統&#xff0c;支持日均10萬訂單處理關鍵角色&#xff1a; 你&#x…

TDengine 3.3.5.0 新功能 —— 查看庫文件占用空間、壓縮率

1. 背景 TDengine 之前版本一直沒有通過 SQL 命令查看數據庫占用的磁盤空間大小&#xff0c;從 3.3.5.0 開始&#xff0c;增加了這個方便且實用的小功能&#xff0c;這里詳細介紹下。 2. SQL 基本語法 select expr from information_schema.ins_disk_usage [where condtion]…

螞蟻百寶箱體驗:如何快速創建“旅游小助手”AI智能體

螞蟻百寶箱作為站式智能體應用開發平臺&#xff0c;致力于為AI開發者提供簡單、高效、快捷的智能體創作體驗。作為業內領先的AI應用開發平臺&#xff0c;開發者可以根據自身的個性化需求&#xff0c;基于各式各樣的大模型來創建一個屬于自己的智能體應用。 螞蟻百寶箱&#xf…