目錄
一、概述
(一)相關概念
(二)特性
二、應用場景
三、安裝
(一)編譯安裝
(二)yum安裝
1、首先制作repo源
2、軟件包名:mongodb-org
3、啟動服務:systemctl start mongod
4、監聽端口:mongod
5、端口號:27017
四、目錄結構
(一)rpm -ql mongodb-org-server
1、MongoDB的配置文件
2、MongoDB的運行目錄
3、MongoDB的可執行文件
4、MongoDB的系統服務文件
5、MongoDB的文檔目錄
6、MongoDB的許可協議文件
7、MongoDB的許可協議文件
8、MongoDB的README文件
9、MongoDB的第三方許可通知文件
10、MongoDB的man手冊文件
11、MongoDB的數據目錄,存儲數據庫文件
12、MongoDB的日志目錄,存儲日志文件
13、MongoDB的日志文件,記錄MongoDB的運行日志
(二)rpm -ql mongodb-org-shell
1、MongoDB客戶端工具的可執行文件路徑(客戶端命令)
2、MongoDB客戶端工具的man手冊文件路徑?
(三)rpm -ql mongodb-org-tools
1、將BSON文件轉換為JSON格式的工具
2、用于安裝MongoDB Compass的工具
3、用于從MongoDB數據庫中導出數據的工具
4、用于將數據從MongoDB導出為JSON、CSV或TSV格式的工具
5、用于在MongoDB GridFS中存儲和檢索文件的工具
6、用于將數據導入MongoDB數據庫的工具
7、用于從mongodump創建的備份文件中恢復數據的工具
8、用于監視MongoDB服務器狀態的工具
9、用于監視MongoDB實例中的操作的工具
10、包含MongoDB工具集的文檔
11、包含MongoDB工具集的第三方軟件許可證通知
12、bsondump工具的man頁
13、mongodump工具的man頁
14、mongoexport工具的man頁
15、mongofiles工具的man頁
16、mongoimport工具的man頁
17、mongoldap工具的man頁
18、mongoreplay工具的man頁
19、mongorestore工具的man頁
20、mongostat工具的man頁
21、mongotop工具的man頁
(四)rpm -ql mongodb-org-mongos
1、存放系統范圍的可執行文件
2、mongos的手冊頁文件
五、默認數據庫
1、admin
2、local
3、config
六、數據庫操作
(一)庫操作
1、查看數據庫
2、顯示當前所在數據庫
3、切換數據庫
4、數據庫創建
4.1、隱式創建
4.2、刪除數據庫
(二)文檔操作
1、創建集合
2、查看集合
3、刪除
3.1、刪除數據庫
3.2、刪除集合
4、插入數據(文檔)
4.1、單行
4.2、多行
5、查詢數據
5.1全集合查詢
5.2、條件查詢
5.3、查詢集合中有多少文檔
6、刪除數據
6.1、全文刪除
6.2、條件刪除
7、更新數據
7.1、所有滿足條件的文檔都進行更新
7.2、更新文檔進行數值遞增
七、MongoDB數據庫備份
(一)備份命令
1、mongodump
2、mongoexport
?(二)恢復命令
1、mongorestore
2、mongoimport
一、概述
? ? ? ?mongodb是一個nosql數據庫,它有高性能、無模式、文檔型的特點。是nosql數據庫中功能最豐富,最像關系數據庫的。數據庫格式為BSON
(一)相關概念
? ? 實例:系統上運行的mongodb的進程,類似于mysql實例;
? ? 庫:每個數據庫都是獨立的,有自己的用戶,權限,獨立存儲集合,類似于mysql的庫;
? ? ?集合:由一組文檔構成,類似于mysql的表;
? ? ?文檔:mongodb數據庫的最小數據集,是由多個鍵值對有序組合的數據單元,類似于mysql的數據記錄;
? ? 主鍵:唯一標識一行數據
(二)特性
? ? ? ? ? ? 1、面向集合文檔存儲,適合存儲json形式的數據;
? ? ? ? ? ? 2、格式自由,數據格式不固定,數據結構發生變更的同時不會影響程序運行;
? ? ? ? ? ? 3、面向對象的sql查詢語句,基本涵蓋關系型數據庫的所有查詢語句;
? ? ? ? ? ? 4、有索引的支持,查詢效率更快;
? ? ? ? ? ? 5、支持復制和自動故障轉移;
? ? ? ? ? ? 6、可以使用分片集群提升查詢性能
面向對象:
? ? ? ?在MongoDB中,數據以文檔(documents)的形式存儲,文檔是一種類似于JSON格式的數據結構,它可以包含鍵值對、數組和嵌套文檔。文檔是MongoDB中的基本數據單元,類似于關系型數據庫中的行(row)。
MongoDB的面向對象概念具有以下特點:
? ? ? ?文檔模型:MongoDB使用文檔模型來表示數據,文檔可以嵌套和包含各種類型的數據,這使得MongoDB非常適合存儲半結構化數據。
? ? ? ?動態模式:相比關系型數據庫,MongoDB的文檔模型是動態的,即同一集合中的不同文檔可以具有不同的結構。這樣可以更容易地適應數據模式的變化和靈活性要求。
繼承和多態:MongoDB支持文檔之間的繼承關系,一個文檔可以從另一個文檔繼承屬性。同時,MongoDB還支持多態,即一個字段可以包含不同類型的值。
? ? ? ?引用關聯:MongoDB支持使用引用關聯文檔,即一個文檔中可以包含對其他文檔的引用。這種引用關聯可以用來建立文檔之間的關系和查詢數據。
? ? ? ?MongoDB的面向對象概念使得它更適合存儲和處理半結構化數據,同時提供了靈活性和擴展性,方便開發者處理不同類型的數據和建立數據之間的關聯。
索引概念:
? ? ? ?MongoDB索引是MongoDB中用于提高查詢性能的數據結構。它類似于關系數據庫中的索引,可以按照特定字段或字段組合進行排序和搜索。
? ? ? ?MongoDB索引通常使用B樹數據結構實現。它可將數據存儲在內存中,以加快查詢速度。當查詢需要訪問大量數據時,索引可以幫助減少磁盤IO操作,提高查詢性能。
? ? ? ?索引可以在單個字段上創建,也可以在多個字段上創建組合索引。創建索引后,MongoDB將使用這些索引來加速查詢過程。索引可以按升序或降序排序,還可以設置唯一性約束,確保索引字段的唯一性。
? ? ? ?索引的創建和使用需要權衡考慮。創建過多的索引會增加存儲空間和寫入操作的開銷,同時也會增加更新數據的復雜性。此外,索引的選擇要基于實際查詢模式和性能需求進行評估。
? ? ? ?總結來說,MongoDB索引是用于提高查詢性能的數據結構,它可以按照特定字段或字段組合進行排序和搜索,并使用B樹數據結構進行實現。索引的創建和使用需要考慮存儲空間、寫入操作開銷和查詢需求等因素。
二、應用場景
? ? ? ?大數據存儲和分析:由于MongoDB的靈活性和可擴展性,它非常適合用于存儲和分析大規模數據集。它可以處理海量的數據,并支持數據聚合、數據分析和實時查詢。
? ? ? ?實時分析和日志處理:MongoDB可以快速地存儲和索引生成的數據,使其適用于實時分析和日志處理。它可以輕松處理大量實時數據,并提供快速的查詢和聚合功能。
? ? ? ?內容管理和博客平臺:MongoDB的文檔模型非常適合存儲和管理文本和多媒體內容。它支持動態模式,可以輕松地適應不同類型和格式的內容。
? ? ? ?社交網絡和實時應用:MongoDB對于實時應用和高并發的場景具有很好的性能。它可以處理大量的讀寫操作,并提供可擴展性和高可用性。
? ? ? ?互聯網應用程序:MongoDB適合用于構建Web應用程序,如電子商務平臺、內容管理系統和在線游戲。它可以處理復雜的數據模型和高并發的訪問請求。
? ? ? ?總結來說,MongoDB適用于處理大規模數據、實時分析、內容管理、社交網絡和互聯網應用程序等各種場景。它提供高性能、可擴展性和靈活性,使開發人員能夠構建出功能強大的應用程序。
三、安裝
(一)編譯安裝
(二)yum安裝
1、首先制作repo源
vim /etc/yum.repos.d/mongodb.repo
[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc
2、軟件包名:mongodb-org
3、啟動服務:systemctl start mongod
4、監聽端口:mongod
5、端口號:27017
四、目錄結構
(一)rpm -ql mongodb-org-server
1、MongoDB的配置文件
vim /etc/mongod.conf
port: 27017 | 監聽端口號 |
bindIp: 127.0.0.1 | 監聽地址 |
2、MongoDB的運行目錄
/run/mongodb
3、MongoDB的可執行文件
/usr/bin/mongod
4、MongoDB的系統服務文件
/usr/lib/systemd/system/mongod.service
5、MongoDB的文檔目錄
/usr/share/doc/mongodb-org-server-4.2.24
6、MongoDB的許可協議文件
/usr/share/doc/mongodb-org-server-4.2.24/LICENSE-Community.txt
7、MongoDB的許可協議文件
/usr/share/doc/mongodb-org-server-4.2.24/MPL-2
8、MongoDB的README文件
/usr/share/doc/mongodb-org-server-4.2.24/README
9、MongoDB的第三方許可通知文件
/usr/share/doc/mongodb-org-server-4.2.24/THIRD-PARTY-NOTICES
10、MongoDB的man手冊文件
/usr/share/man/man1/mongod.1.gz
11、MongoDB的數據目錄,存儲數據庫文件
/var/lib/mongo
12、MongoDB的日志目錄,存儲日志文件
/var/log/mongodb
13、MongoDB的日志文件,記錄MongoDB的運行日志
/var/log/mongodb/mongod.log
(二)rpm -ql mongodb-org-shell
1、MongoDB客戶端工具的可執行文件路徑(客戶端命令)
/usr/bin/mongo
2、MongoDB客戶端工具的man手冊文件路徑?
/usr/share/man/man1/mongo.1.gz
?
(三)rpm -ql mongodb-org-tools
1、將BSON文件轉換為JSON格式的工具
/usr/bin/bsondump
2、用于安裝MongoDB Compass的工具
/usr/bin/install_compass
3、用于從MongoDB數據庫中導出數據的工具
/usr/bin/mongodump
4、用于將數據從MongoDB導出為JSON、CSV或TSV格式的工具
/usr/bin/mongoexport
5、用于在MongoDB GridFS中存儲和檢索文件的工具
/usr/bin/mongofiles
6、用于將數據導入MongoDB數據庫的工具
/usr/bin/mongoimport
7、用于從mongodump創建的備份文件中恢復數據的工具
/usr/bin/mongorestore
8、用于監視MongoDB服務器狀態的工具
/usr/bin/mongostat
9、用于監視MongoDB實例中的操作的工具
/usr/bin/mongotop
10、包含MongoDB工具集的文檔
/usr/share/doc/mongodb-org-tools-4.2.24
11、包含MongoDB工具集的第三方軟件許可證通知
/usr/share/doc/mongodb-org-tools-4.2.24/THIRD-PARTY-NOTICES.gotools
12、bsondump工具的man頁
/usr/share/man/man1/bsondump.1.gz
13、mongodump工具的man頁
/usr/share/man/man1/mongodump.1.gz
14、mongoexport工具的man頁
/usr/share/man/man1/mongoexport.1.gz
15、mongofiles工具的man頁
/usr/share/man/man1/mongofiles.1.gz
16、mongoimport工具的man頁
/usr/share/man/man1/mongoimport.1.gz
17、mongoldap工具的man頁
/usr/share/man/man1/mongoldap.1.gz
18、mongoreplay工具的man頁
/usr/share/man/man1/mongoreplay.1.gz
19、mongorestore工具的man頁
/usr/share/man/man1/mongorestore.1.gz
20、mongostat工具的man頁
/usr/share/man/man1/mongostat.1.gz
21、mongotop工具的man頁
/usr/share/man/man1/mongotop.1.gz
(四)rpm -ql mongodb-org-mongos
1、存放系統范圍的可執行文件
/usr/bin/mongos
2、mongos的手冊頁文件
/usr/share/man/man1/mongos.1.gz
五、默認數據庫
進入MongoDB數據庫命令
mongo
1、admin
? ? 從權限的角度來看,這是"root"數據庫。要是將一個用戶添加到這個數據庫,這個用戶自動繼承所有數據庫的權限。
一些特定的服務器端命令也只能從這個數據庫運行,比如列出所有的數據庫或者關閉服務器。
2、local
? ? 這個數據庫永遠不會被復制,可以用來存儲限于本地單臺服務器的任意集合。
3、config
? ? 當Mongo用于分片設置時,config數據庫在內部使用,用于保存分片的相關信息。
六、數據庫操作
(一)庫操作
1、查看數據庫
注:以下命令二選一即可,均可正常使用。
show databases
show dbs
?
2、顯示當前所在數據庫
db
?
3、切換數據庫
use?zn
?
4、數據庫創建
4.1、隱式創建
? ? ? ?不用主動創建,使用use newDB,會自動創建不存在的數據庫,只有在庫中創建集合后才會保存,并使用show dbs查看到
4.2、刪除數據庫
? ? ? ? use dbName
? ? ? ? db.dropdatabase()
(二)文檔操作
1、創建集合
db.createCollection('wjy')
2、查看集合
show tables
?
3、刪除
3.1、刪除數據庫
db.dropDatabase()
?
?注:在刪除數據庫時,一定要先進入要刪除的數據庫
3.2、刪除集合
? ? ? ? db.需要刪除的集合名稱.drop()
db.wjy.drop()
? ? ? ?db["123"].drop()是指在數據庫中刪除名為"123"的集合(collection)或表(table)。
其中,db是數據庫對象,["123"]表示要操作的集合或表的名稱,drop()表示刪除該集合或表。?
db.getCollection("123").drop()
4、插入數據(文檔)
4.1、單行
? ? ? ? db.集合名稱.insert({key:value})
db.wjy.insert({'a':'123'})
?查看命令:
db.wjy.find({})
?內容解析:
{ "_id" : ObjectId("64da1f759aabd69ea17751d8"), "a" : "123" }
這是一個MongoDB的文檔數據,結構如下:
{ "_id" : ObjectId("64da1f759aabd69ea17751d8"), "a" : "123" }
其中:
_id
?是文檔的唯一標識符,由MongoDB自動生成,用于唯一標識該文檔。
a
?是文檔中的一個字段,它的值是字符串 "123"。
4.2、多行
? ? ? ? db.集合名稱.insertmany([{key:value},{key:value},{key:value}])
db.wjy.insertMany([{'b':'1234'},{'c':'12345'},{'d':'123456'}])
?內容解析:
這是一個MongoDB的操作結果,對應的內容解析如下:
acknowledged
?表示操作是否被MongoDB服務器確認執行。如果值為true,表示操作已被成功確認。insertedIds
?表示插入操作成功后生成的文檔的唯一標識符(ObjectIds)的列表。在這個例子中,三個文檔被成功插入,它們的唯一標識符分別是:
- ObjectId("64da20c76fb9e74578a149d1")
- ObjectId("64da20c76fb9e74578a149d2")
- ObjectId("64da20c76fb9e74578a149d3")
這個操作的結果說明在執行插入操作后,MongoDB服務器已經成功確認了操作,并且返回了生成的插入文檔的唯一標識符列表。
db.wjy.find({})
??? ? ? ? mongodb默認數字的數據類型float浮點型,若要改變為整型:NumberInt(數字)兩種方式:
db.wjy.insert({'_id':'1','a':'123','phone':'111111'})
db.wjy.insert({'_id':NumberInt(2),'b':'1234','phone':'222222'})
?刪除數據
db.wjy.deleteMany({})
5、查詢數據
5.1全集合查詢
? ? ? ? ? ? db.集合名稱.find({})
db.wjy.find({})
?? ? ? ? ? ? db.集合名稱.find()
db.wjy.find()
5.2、條件查詢
? ? ? ? ? ? db.info.find({查詢條件1key:value,查詢條件2,...},{key1:1|0,key2:1|0,...})
db.wjy.find({'a':'123'})
db.wjy.find({'a':'123'},{'a':0})
?
?命令解析:
db.wjy
?表示在數據庫中選擇集合?wjy
?進行查詢。db
?是數據庫對象,wjy
?是集合名稱。find({'a':'123'})
?表示查詢集合中的文檔,其中字段?a
?的值為?'123'
。{'a':0}
?表示設置查詢結果中不包含字段?a
。在查詢結果中,其他字段將會被返回,而字段?a
?不會被返回。這個查詢操作的意思是,在集合
wjy
中查找字段a
的值為'123'
的文檔,并返回這些文檔中除了字段a
以外的其他字段。
? ? ? ? ? ? key:1 顯示,key:0 不顯示
? ? ? ? ? ? 當顯示的key只有一個時,key:1 只顯示該key及對應value,key:0 顯示除了該key之外其他所有keyvalue
5.3、查詢集合中有多少文檔
? ? ? ? ? ? db.集合名稱.count()
db.wjy.count()
?
6、刪除數據
6.1、全文刪除
? ? ? ? ? ? db.集合名稱.remove({})
db.wjy.remove({})
6.2、條件刪除
? ? ? ? ? ? db.集合名稱.remove({key:value})
db.wjy.remove({'b':'1234'})
7、更新數據
db.wjy.update({_id:'1'},{$set:{'phone':'222222'}})
7.1、所有滿足條件的文檔都進行更新
? ? ? ? ? ? db.info.update({userid:"1003"},{$set:{nickname:"tom"}},{multi:true})
7.2、更新文檔進行數值遞增
? ? ? ? ? ? db.info.update({userid:"1003"},{$inc:{likenum:NumberInt(1000)}})
先創建5個同名,方面更改完成查看
?第一個:
db.wjy.update({userID:NumberInt(1)},{$inc:{userID:NumberInt(10)}})
?第二個:
db.wjy.update({userID:NumberInt(1)},{$inc:{userID:NumberInt(20)}})
?第三個:
db.wjy.update({userID:NumberInt(1)},{$inc:{userID:NumberInt(30)}})
第四個:
db.wjy.update({userID:NumberInt(1)},{$inc:{userID:NumberInt(-20)}})
?第五個:
db.wjy.update({userID:NumberInt(1)},{$inc:{userID:NumberInt(-10)}})
七、MongoDB數據庫備份
(一)備份命令
1、mongodump
? ? ? ? 選項
? ? ? ? ? ? -h=hostname:port
? ? ? ? ? ? -u=<username>
? ? ? ? ? ? -p=<password>
? ? ? ? ? ? --authenticationDatabase=<dbname>
? ? ? ? ? ? -d=<database>
? ? ? ? ? ? -o=<path>
? ? ? ? 語法
? ? mongodump -d dbName -h hostName:port -u userName -p Password -o backupDirectory
mkdir /bak
mongodump -d zn -o /bak
?
2、mongoexport
? ? ? ? 選項
? ? ? ? ? ? -h=hostname:port
? ? ? ? ? ? -u=<username>
? ? ? ? ? ? -p=<password>
? ? ? ? ? ? --authenticationDatabase=<dbname>
? ? ? ? ? ? -d=<database>
? ? ? ? ? ? -o=<path>
? ? ? ? 語法
? ? ? ? ? ? mongoexport -d dbName -c tableName -h hostName:port -u userName -p Password -o backupDirectory/jsonFile.json
mongoexport -d zn -c wjy -o /bak/zn_wjy-bak.json
?
?(二)恢復命令
注:在恢復備份前,我們先刪除 zn 數據庫,不然無法體現出恢復效果
1、mongorestore
? ? ? ? 選項
? ? ? ? ? ? -h=hostname:port
? ? ? ? ? ? -u=<username>
? ? ? ? ? ? -p=<password>
? ? ? ? ? ? --authenticationDatabase=<dbname>
? ? ? ? ? ? -d=<database>
? ? ? ? ? ? --drop 當目標數據庫中存在同名集合則刪除再恢復
? ? ? ? 語法
? ? ? ? ? ? mongorestore -h hostName -u username -p password -d dbName -c tableName bakcupDirector/bsonFile
mongorestore -d zn -c wjy /bak/zn/wjy.bson
?內容解析:
? ? ?checking for collection data in /bak/zn/wjy.bson:檢查備份文件/bak/zn/wjy.bson中是否有集合數據。
? ? ?reading metadata for zn.wjy from /bak/zn/wjy.metadata.json:從備份文件/bak/zn/wjy.metadata.json中讀取集合"zn.wjy"的元數據信息。
? ? ?restoring zn.wjy from /bak/zn/wjy.bson:從備份文件/bak/zn/wjy.bson中恢復集合"zn.wjy"的數據。
? ? ?no indexes to restore:沒有索引需要恢復。
? ? ?finished restoring zn.wjy (5 documents, 0 failures):成功完成集合"zn.wjy"的數據恢復,總共恢復了5個文檔,沒有失敗的文檔。
? ? ?5 document(s) restored successfully. 0 document(s) failed to restore.:成功恢復了5個文檔,沒有失敗的文檔。
mongo
show dbs
use zn
show tables
db.wjy.find({})
?現在已經驗證備份已經恢復完畢
2、mongoimport
注:在恢復備份前,我們先刪除 zn 數據庫下的 wjy 集合,不然無法體現出恢復效果
db.wjy.drop()
?
?? ? ? ? 選項
? ? ? ? ? ? -h=hostname:port
? ? ? ? ? ? -u=<username>
? ? ? ? ? ? -p=<password>
? ? ? ? ? ? --authenticationDatabase=<dbname>
? ? ? ? ? ? -d=<database>
? ? ? ? ? ? --drop 當目標數據庫中存在同名集合則刪除再恢復
? ? ? ? 語法
? ? ? ? ? ? mongoimport -d dbName -c tableName -h hostName:port -u userName -p Password ?backupDirectory/jsonFile.json
mongoimport -d zn -c wjy /bak/zn_wjy-bak.json
?內容解析:
2023-08-14T23:05:48.974+0800 ? ?connected to: mongodb://localhost/
2023-08-14T23:05:48.982+0800 ? ?5 document(s) imported successfully. 0 document(s) failed to import.
?進入數據庫查看驗證
mongo
show dbs
show tables
db.wjy.find({})
?經過查看,數據庫集合內容已經成功進行恢復
總結
? ? ? ?MongoDB是一種強大的非關系型數據庫,具有高性能、靈活的數據模型和豐富的功能。它適用于各種應用場景,包括大數據、實時分析和Web應用程序等。盡管使用MongoDB需要一些學習和配置,但它提供的性能和可擴展性使得它成為許多開發者和組織的首選數據庫管理系統。