動態

詳情 返回 返回

【Spring開發】SpringCloud交友項目實戰第9篇:2. MongoDB簡介,3. MongoDB入門【附代碼 - 動態 詳情

🏆🏆🏆教程全知識點簡介:1、Dubbo的前世今生 1、項目介紹 1.1、項目背景 1.2、市場分析 1.3、目標用户羣體 1.4、使用場景 1.5、競爭對手分析 1.7、技術方案 2、前後端分離開發思想 3、開發工具與環境搭建 3.1、開發工具 3.2、環境搭建 4、sms_code驗證瑪 4.1 阿里雲短信 4.2 自動裝配 1. 完善用户信息 1.2 百度人臉識別 1.2.1 概述 1.2.2 賬號申請 1.2.4 抽取模板工具 2.2 更新用户資料 2.2.1 接口文檔 2.2.2 代碼實現 3. 統一token處理 3.1.需求分析 3.2 解決方案 攔截器(Interceptor) ThreadLocal MongoDB入門 數據庫以及表的操作 新增數據 更新數據 刪除數據 查詢數據 1.3 設置陌生人問題 1.4 通知設置 1.5 黑名單管理 4. SpringData-Mongo 4.2 完成基本操作 5. 今日佳人 5.1 表結構設計 5.2 服務提供者 5.2.0 導入依賴 5.2.2 RecommendUserApi接口 分片集羣 原理介紹 集羣搭建 2、圈子功能 2.1、功能説明 3、圈子實現 3.2、發佈動態 1. 動態查詢 1.1 查詢好友動態 2. 圈子互動 2.3 動態點贊 2.4.3 喜歡標識 安裝 準備 使用 1. 即時通信 2. 環信 2.1 開發簡介 2.2 環信Console 2.3 環信API介紹 初始化 基礎API 3. 抽取環信組件 3.1 編寫Properties對象 3.2 編寫HuanXinTemplate 3.3 編寫自動配置類 2. MongoDB地理位置檢索 2.1 地理位置索引 Point LineString Polygon 2.2 案例 3. 上報地理位置 4. 搜附近 1. 我的訪客 1.2 記錄訪客數據 tanhua-model tanhua-app-server tanhua-dubbo-interface 1.3 首頁誰看過我 需求分析 3. FastDFS 3.2. 工作原理 3.2.1. 文件的上傳 分佈式文件系統FDFS配置 4. 發佈小視頻 1、用户凍結解凍 1.1 用户凍結 1.3 查詢數據列表 1.4 明日系統修改 2.2 定時任務 3、內容審核 1、瞭解推薦系統 1.1、什麼是推薦系統? 1.3、推薦系統業務流程 1.4、協同過濾推薦算法 1.5、ALS算法 2、好友推薦 2.1、流程 2.2、部署好友推薦服務

<!-- start:bj1 -->

📚📚👉👉👉本站這篇博客:   https://segmentfault.com/a/1190000047242866    中查看

📚📚👉👉👉本站這篇博客:   https://segmentfault.com/a/1190000047242866    中查看

<!-- end:bj1 -->

✨ 本教程項目亮點

🧠 知識體系完整:覆蓋從基礎原理、核心方法到高階應用的全流程內容
💻 全技術鏈覆蓋:完整前後端技術棧,涵蓋開發必備技能
🚀 從零到實戰:適合 0 基礎入門到提升,循序漸進掌握核心能力
📚 豐富文檔與代碼示例:涵蓋多種場景,可運行、可複用
🛠 工作與學習雙參考:不僅適合系統化學習,更可作為日常開發中的查閲手冊
🧩 模塊化知識結構:按知識點分章節,便於快速定位和複習
📈 長期可用的技術積累:不止一次學習,而是能伴隨工作與項目長期參考

🎯🎯🎯全教程總章節


🚀🚀🚀本篇主要內容

2. MongoDB簡介

對於社某交類軟件的功能, 需要對它的功能特點做分析:

  • 數據量會隨着用户數增大而增大
  • 讀多寫少
  • 價值較低
  • 非好友看不到其動態內容
  • 地理位置的查詢
  • ……

針對以上特點, 來分析一下:

  • mysql:關係型數據庫(效率低)
  • redis:redis緩存(微博,效率高,數據格式不豐富)
  • 對於數據量大而言,顯然不能夠使用關係型數據庫進行存儲, 需要通過MongoDB進行存儲
  • 對於讀多寫少的應用,需要減少讀取的成本

    • 比如説,一條SQL語句,單張表查詢一定比多張表查詢要快

明日交友

  • mongodb:存儲業務數據(圈子,推薦的數據,小視頻數據,點贊,評論等)
  • redis:承擔的角色是緩存層(提升查詢效率)
  • mysql:存儲和核心業務數據,賬户

2.1 MongoDB簡介

MongoDB:是一個高效的非關係型數據庫(不支持表關係:只能操作單表)

MongoDB是一個基於分佈式文件存儲的數據庫。由C++語言編寫。旨在為WEB應用提供可擴展的高性能數據存儲解決方案。

MongoDB是一個介於關係數據庫和非關係數據庫之間的產品,是非關係數據庫當中功能最豐富,最像關係數據庫的,它支持的數據結構非常鬆散,是類似json的bson格式,因此可以存儲比較複雜的數據類型。

MongoDB最大的特點是它支持的查詢語言非常強大,其語法有點類似於面向對象的查詢語言,幾乎可以實現類似關係數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。

官網:https://www.mongodb.com

2.2 MongoDB的特點

MongoDB 最大的特點是他支持的查詢語言非常強大,其語法有點類似於面向對象的查詢語言,幾乎可以實現類似關係數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。它是一個面向集合的,模式自由的文檔型數據庫。具體特點總結如下:

  1. 面向集合存儲,易於存儲對象類型的數據
  2. 模式自由
  3. 支持動態查詢
  4. 支持完全索引,包含內部對象
  5. 支持複製和故障恢復
  6. 使用高效的二進制數據存儲,包括大型對象(如視頻等)
  7. 自動處理碎片,以支持雲計算層次的擴展性
  8. 支持 Python,PHP,Ruby,Java,C,C#,Javascript,Perl及C++語言的驅動程 序, 社區中也提供了對Erlang及.NET 等平台的驅動程序
  9. 文件存儲格式為 BSON(一種 JSON 的擴展)

MYSQL : 用於存儲安全性要求比較高的數據

REDIS : 存儲數據格式簡單 , 並且查詢非常多的數據(用户緩存)

MONGDB : 用户存儲海量數據, 並且數據的安全性要求不高

2.2.1 通過docker安裝MongoDB

在資料的虛擬機中已經提供了MongoDB的鏡像和容器, 只需要使用簡單的命令即可啓動

#進入base目錄

[SonarQube Java 規則](https://rules.sonarsource.com/java/)

cd /root/docker-file/base/
#批量創建啓動容器,其中已經包含了redis,zookeeper,mongodb容器
docker-compose up -d
#查看容器
docker ps -a

可以看到mongoDB已經啓動,對外暴露了27017的操作端口

2.2.2 MongoDB體系結構

Disruptor 文檔

MongoDB 的邏輯結構是一種層次結構。主要由: 文檔(document) 集合(collection) 數據庫(database)這三部分組成的。邏輯結構是面 向用户的,用户使用 MongoDB 開發應用程序使用的就是邏輯結構。

  1. MongoDB 的文檔(document),相當於關係數據庫中的一行記錄。
  2. 多個文檔組成一個集合(collection),相當於關係數據庫的表。
  3. 多個集合(collection),邏輯上組織在一起,就是數據庫(database)。
  4. 一個 MongoDB 實例支持多個數據庫(database)。 文檔(document) 集合(collection) 數據庫(database)的層次結構如下圖:

為了更好的理解,下面與SQL中的概念進行對比:

SQL術語/概念 MongoDB術語/概念 解釋/説明
database database 數據庫
table collection 數據庫表/集合
row document 表中的一條數據
column field 數據字段/域
index index 索引

JDK 11 API 文檔

| table joins | | 表連接,MongoDB不支持 |
| primary key | primary key | 主鍵,MongoDB自動將_id字段設置為主鍵 |

2.3 數據類型

  • 數據格式:BSON {aa:bb}
  • null:用於表示空值或者不存在的字段,{“x”:null}
  • 布爾型:布爾類型有兩個值true和false,{“x”:true}
  • 數值:shell默認使用64為浮點型數值。{“x”:3.14}或{“x”:3}。對於整型值,可以使用 NumberInt(4字節符號整數)或NumberLong(8字節符號整數), {“x”:NumberInt(“3”)}{“x”:NumberLong(“3”)}
  • 字符串:UTF-8字符串都可以表示為字符串類型的數據,{“x”:“呵呵”}
  • 日期:日期被存儲為自新紀元依賴經過的毫秒數,不存儲時區,{“x”:new Date()}
  • 正則表達式:查詢時,使用正則表達式作為限定條件,語法與JavaScript的正則表達式相 同,{“x”:/[abc]/}

OkHttp 文檔

  • 數組:數據列表或數據集可以表示為數組,{“x”: [“a“,

3. MongoDB入門

3.1 數據庫以及表的操作

#查看所有的數據庫
> show dbs

#通過use關鍵字切換數據庫
> use admin

#創建數據庫
#説明:在MongoDB中,數據庫是自動創建的,通過use切換到新數據庫中,進行插入數據即可自動創建數據庫
> use testdb

> show dbs #並沒有創建數據庫

> db.user.insert({id:1,name:'zhangsan'})  #插入數據

> show dbs

#查看錶
> show tables

> show collections

#刪除集合(表)
> db.user.drop()
true  #如果成功刪除選定集合,則 drop() 方法返回 true,否則返回 false。

#刪除數據庫

[PMD 文檔](https://pmd.github.io/)

> use testdb #先切換到要刪除的數據中

> db.dropDatabase()  #刪除數據庫

3.2 新增數據

在MongoDB中,存儲的文檔結構是一種類似於json的結構,稱之為bson(全稱為:Binary JSON)。

#插入數據
#語法:db.表名.insert(json字符串)

> db.user.insert({id:1,username:'zhangsan',age:20})


> db.user.find()  #查詢數據

3.3 更新數據

update() 方法用於更新已存在的文檔。語法格式如下:

db.collection.update(
   <query>,
   <update>,
   [
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   ]
)

JUnit 4 文檔

Java 語言規範

參數説明:

  • query : update的查詢條件,類似sql update查詢內where後面的。
  • update : update的對象和一些更新的操作符(如$,$inc.$set)等,也可以理解為sql update查詢內set後面的
  • upsert : 可選,這個參數的意思是,如果不存在update的記錄,是否插入objNew,true為插入,默認是false,不插入。
  • multi : 可選,mongodb 默認是false,只更新找到的第一條記錄,如果這個參數為true,就把按條件查出來多條記錄全部更新。
  • writeConcern :可選,拋出異常的級別。
#查詢全部
> db.user.find()

#更新數據
> db.user.update({id:1},{$set:{age:22}}) 

#注意:如果這樣寫,會刪除掉其他的字段
> db.user.update({id:1},{age:25})

#更新不存在的字段,會新增字段
> db.user.update({id:2},{$set:{sex:1}}) #更新數據

#更新不存在的數據,默認不會新增數據
> db.user.update({id:3},{$set:{sex:1}})

#如果設置第一個參數為true,就是新增數據
> db.user.update({id:3},{$set:{sex:1}},true)

3.4 刪除數據

通過remove()方法進行刪除數據,語法如下:

db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)

參數説明:

  • query :(可選)刪除的文檔的條件。
  • justOne : (可選)如果設為 true 或 1,則只刪除一個文檔,如果不設置該參數,或使用默認值 false,則刪除所有匹配條件的文檔。
  • writeConcern :(可選)拋出異常的級別。

實例:

#刪除數據
> db.user.remove({})

#插入4條測試數據
db.user.insert({id:1,username:'zhangsan',age:20})
db.user.insert({id:2,username:'lisi',age:21})
db.user.insert({id:3,username:'wangwu',age:22})
db.user.insert({id:4,username:'zhaoliu',age:22})

> db.user.remove({age:22},true)

#刪除所有數據
> db.user.remove({})

3.5 查詢數據

MongoDB 查詢數據的語法格式如下:

db.user.find([query],[fields])
  • query :可選,使用查詢操作符指定查詢條件
  • fields :可選,使用投影操作符指定返回的鍵。查詢時返回文檔中所有鍵值, 只需省略該參數即可(默認省略)。

條件查詢:

操作 格式 範例 RDBMS中的類似語句
等於 {<key>:<value>} db.col.find({"by":"黑馬程序員"}).pretty() where by = '黑馬程序員'
小於 {<key>:{$lt:<value>}} db.col.find({"likes":{$lt:50}}).pretty() where likes < 50
小於或等於 {<key>:{$lte:<value>}} db.col.find({"likes":{$lte:50}}).pretty() where likes <= 50
大於 {<key>:{$gt:<value>}} db.col.find({"likes":{$gt:50}}).pretty() where likes > 50
大於或等於 {<key>:{$gte:<value>}} `db.col.find({"likes":{$gte:

Add a new 評論

Some HTML is okay.