概述
mongodb是一個nosql數據庫,它有高性能、無模式、文檔型的特點。是nosql數據庫中功能最豐富,最像關系數據庫的。數據庫格式為BSON
相關概念 | 實例:系統上運行的mongodb的進程,類似于mysql實例; |
庫:每個數據庫都是獨立的,有自己的用戶,權限,獨立存儲集合,類似于mysql的庫; | |
?集合:由一組文檔構成,類似于mysql的表; | |
?文檔:mongodb數據庫的最小數據集,是由多個鍵值對有序組合的數據單元,類似于mysql的數據記錄; | |
主鍵:唯一標識一行數據 |
特性 | 1、面向集合文檔存儲,適合存儲json形式的數據; |
2、格式自由,數據格式不固定,數據結構發生變更的同時不會影響程序運行; | |
3、面向對象的sql查詢語句,基本涵蓋關系型數據庫的所有查詢語句; | |
4、有索引的支持,查詢效率更快; | |
5、支持復制和自動故障轉移; | |
6、可以使用分片集群提升查詢性能 |
應用場景
游戲\物流\社交\物聯網\視頻直播\大數據
安裝Mongodb
rpm安裝
移動到yum.repos.d目錄下創建mongodb的yum文件
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# vim mongo.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安裝
[root@localhost yum.repos.d]# yum install -y mongodb-org..
..正在安裝 : mongodb-org-tools-4.2.24-1.el7.x86_64 1/5 正在安裝 : mongodb-org-mongos-4.2.24-1.el7.x86_64 2/5 正在安裝 : mongodb-org-shell-4.2.24-1.el7.x86_64 3/5 正在安裝 : mongodb-org-server-4.2.24-1.el7.x86_64 4/5
Created symlink from /etc/systemd/system/multi-user.target.wants/mongod.service to /usr/lib/systemd/system/mongod.service.正在安裝 : mongodb-org-4.2.24-1.el7.x86_64 5/5 驗證中 : mongodb-org-server-4.2.24-1.el7.x86_64 1/5 驗證中 : mongodb-org-4.2.24-1.el7.x86_64 2/5 驗證中 : mongodb-org-shell-4.2.24-1.el7.x86_64 3/5 驗證中 : mongodb-org-mongos-4.2.24-1.el7.x86_64 4/5 驗證中 : mongodb-org-tools-4.2.24-1.el7.x86_64 5/5 已安裝:mongodb-org.x86_64 0:4.2.24-1.el7 作為依賴被安裝:mongodb-org-mongos.x86_64 0:4.2.24-1.el7 mongodb-org-server.x86_64 0:4.2.24-1.el7 mongodb-org-shell.x86_64 0:4.2.24-1.el7 mongodb-org-tools.x86_64 0:4.2.24-1.el7 完畢!
啟動數據庫并查看端口號
注:啟動數據庫服務特殊db沒有b
systemctl start mongod.service?
[root@localhost ~]# systemctl start mongod.service
[root@localhost ~]# netstat -antpu | grep mongod
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 74651/mongod
目錄結構
rpm -ql mongodb-org-server | /etc/mongod.conf | port: 27017 | 監聽端口號 |
bindIp: 127.0.0.1 | 監聽地址 | ||
/run/mongodb | PID文件 | ||
/usr/bin/mongod | 啟動命令 | ||
/var/lib/mongo | 存儲數據文件 | ||
/var/log/mongodb | 日志 |
rpm -ql mongodb-org-shell | /usr/bin/mongo | 客戶端命令 |
rpm -ql mongodb-org-tools | /usr/bin/mongodump | 備份數據庫 |
/usr/bin/mongoexport | 備份文檔 | |
/usr/bin/mongoimport | 恢復文檔 | |
/usr/bin/mongorestore | 恢復數據庫 |
默認數據庫
admin: | 從權限的角度來看,這是"root"數據庫。要是將一個用戶添加到這個數據庫,這個用戶自動繼承所有數據庫的權限。 一些特定的服務器端命令也只能從這個數據庫運行,比如列出所有的數據庫或者關閉服務器。 |
local: | 這個數據庫永遠不會被復制,可以用來存儲限于本地單臺服務器的任意集合。 |
config: | 當Mongo用于分片設置時,config數據庫在內部使用,用于保存分片的相關信息。 |
數據庫操作
庫操作命令整理
查看數據庫 | show databases | |
show dbs | ||
顯示當前所在數據庫 | db | |
切換數據庫 | use ?dbName | |
數據庫創建 | 隱式創建 | 不用主動創建,使用use newDB,會自動創建不存在的數據庫 |
只有在庫中創建集合后才會保存,并使用show dbs查看到 | ||
刪除數據庫 | use dbName | |
db.dropdatabase() |
?輸入mongo就會進入數據庫模式
[root@localhost ~]# mongo
MongoDB shell version v4.2.24
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("593314ff-d1da-4a78-b01b-128e04aa71d8") }
MongoDB server version: 4.2.24
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, seehttps://docs.mongodb.com/
Questions? Try the MongoDB Developer Community Forumshttps://community.mongodb.com
Server has startup warnings:
2023-08-14T18:50:28.519+0800 I CONTROL [initandlisten]
2023-08-14T18:50:28.519+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2023-08-14T18:50:28.519+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2023-08-14T18:50:28.519+0800 I CONTROL [initandlisten]
2023-08-14T18:50:28.519+0800 I CONTROL [initandlisten]
2023-08-14T18:50:28.519+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2023-08-14T18:50:28.519+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2023-08-14T18:50:28.519+0800 I CONTROL [initandlisten]
2023-08-14T18:50:28.519+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2023-08-14T18:50:28.519+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2023-08-14T18:50:28.519+0800 I CONTROL [initandlisten]
---
Enable MongoDB's free cloud-based monitoring service, which will then receive and display
metrics about your deployment (disk utilization, CPU, operation statistics, etc).The monitoring data will be available on a MongoDB website with a unique URL accessible to you
and anyone you share the URL with. MongoDB may use this information to make product
improvements and to suggest MongoDB products and deployment options to you.To enable free monitoring, run the following command: db.enableFreeMonitoring()
To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
--->
與mysql不同的查看命令dbs
> show databases
admin 0.000GB
config 0.000GB
local 0.000GB
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
> 兩個命令都可以查看數據庫
切換數據庫
> use local
switched to db local 一切換到當前數據庫> db
local 所在庫
創建數據庫
> use liweijia
switched to db liweijia
刪除數據庫
use dbName
db.dropdatabase()
文檔操作
mongodb存儲數字時默認是float,若要以整型形式存儲numberInt()
文檔操作命令整理 | |||
查看集合 | show tables | ||
創建集合 | db.createCollection("test") | ||
刪除集合 | db.需要刪除的集合名稱.drop() | ||
插入數據(文檔) | db.集合名稱.insert({key:value})? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?單行 | ||
db.集合名稱.insertmany([{key:value},{key:value},{key:value}])? ? ? ? 多行 | |||
mongodb默認數字的數據類型float浮點型,若要改變為整型:NumberInt(數字) | |||
查詢數據 | 全集合查詢 | db.集合名稱.find({}) | |
db.集合名稱.find() | |||
條件查詢 | db.info.find({查詢條件1key:value,查詢條件2,...},{key1:1|0,key2:1|0,...}) | ||
key:1 顯示,key:0 不顯示 | |||
當顯示的key只有一個時,key:1 只顯示該key及對應value,key:0 顯示除了該key之外其他所有keyvalue | |||
查詢集合中有多少文檔 | db.集合名稱.count() | ||
刪除數據 | 全文刪除 | db.集合名稱.remove({}) | |
條件刪除 | db.集合名稱.remove({key:value}) | ||
更新數據 | db.info.update({_id:"3"}, {$set:{nickname:"jack"}}) | ||
所有滿足條件的文檔都進行更新 | db.info.update({userid:"1003"},{$set:{nickname:"tom"}},{multi:true}) | ||
更新文檔進行數值遞增 | db.info.update({userid:"1003"},{$inc:{likenum:NumberInt(1000)}}) |
創建集合
> db.createCollection('shiyan')
{ "ok" : 1 }查看集合
> show tables
shiyan刪除集合
> db.shiyan.drop()
true
> show tables
>插入數據單行
創建數據庫
> use lwj
switched to db lwj
> db.createCollection("test")
{ "ok" : 1 }
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
lwj 0.000GB
test 0.000GB
> db.lwj.insert({'id':'1','name':'lwj1'})
WriteResult({ "nInserted" : 1 })插入數據多行
> db.lwj.insertMany([{'id':'2','name':'lwj2'},{'id':'3','name':'lwj3'},{'id':'4','name':'lwj4'}])
{"acknowledged" : true,"insertedIds" : [ObjectId("64dae9e52e7071ebd2631dcd"),ObjectId("64dae9e52e7071ebd2631dce"),ObjectId("64dae9e52e7071ebd2631dcf")]
}
> 全集合查詢
> db.lwj.find()
{ "_id" : ObjectId("64dae4232e7071ebd2631dcc"), "id" : "1", "name" : "lwj1" }
{ "_id" : ObjectId("64dae9e52e7071ebd2631dcd"), "id" : "2", "name" : "lwj2" }
{ "_id" : ObjectId("64dae9e52e7071ebd2631dce"), "id" : "3", "name" : "lwj3" }
{ "_id" : ObjectId("64dae9e52e7071ebd2631dcf"), "id" : "4", "name" : "lwj4" }條件查詢
檢索id等于3的數據
> db.lwj.find({'id':'3'})
{ "_id" : ObjectId("64dae9e52e7071ebd2631dce"), "id" : "3", "name" : "lwj3" }
>
條件查詢其中{'name':'0'}則是除了name都顯示,{'name':'1'}指的是只顯示name
> db.lwj.find({'id':'3'},{name:0})
{ "_id" : ObjectId("64dae9e52e7071ebd2631dce"), "id" : "3" }
> db.lwj.find({'id':'3'},{name:1})
{ "_id" : ObjectId("64dae9e52e7071ebd2631dce"), "name" : "lwj3" }數據更新(匹配1,未完成0,已完成1)
> db.lwj.update({'name':'lwj1'},{$set:{'id':'1024'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
查看
> db.lwj.find({'name':'lwj1'})
{ "_id" : ObjectId("64dae4232e7071ebd2631dcc"), "id" : "1024", "name" : "lwj1" }
Mongodb數據庫備份
備份命令: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 -d 指定要備份的數據庫名稱 -h 指定主機名端口號如:localhost:27017 -u -p 用戶密碼 -o 指定備份文件輸出的目錄,備份文件以該目錄為基準創建 | |
備份命令: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 |
mongodump備份 首先要exit退出數據庫模式
> exit
bye
[root@localhost ~]# ?mongodump -d lwj -o /opt/lwj-back.json
2023-08-15T13:47:40.395+0800 ? ?writing lwj.lwj to /opt/lwj-back.json/lwj/lwj.bson
2023-08-15T13:47:40.396+0800 ? ?writing lwj.test to /opt/lwj-back.json/lwj/test.bson
2023-08-15T13:47:40.396+0800 ? ?done dumping lwj.lwj (4 documents)
2023-08-15T13:47:40.397+0800 ? ?done dumping lwj.test (0 documents)
[root@localhost ~]# cd /opt
[root@localhost opt]# ls
lwj-back.json ?rhmongoexport備份test合集 首先要exit退出數據庫模式
> exit
bye
[root@localhost opt]# mongoexport -d lwj -c test -o /opt/test-bakc.json
2023-08-15T13:55:58.611+0800 connected to: mongodb://localhost/
2023-08-15T13:55:58.614+0800 exported 0 records
[root@localhost opt]# ls
lwj-back.json rh test-bakc.json
[root@localhost opt]#
恢復命令: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 | |
恢復命令:mongoimport | ||
選項 | -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 |
先刪除lwj數據庫
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
lwj 0.000GB
test 0.000GB
> show tables
lwj
shiyan
> use lwj
switched to db lwj
> db.dropDatabase()
{ "dropped" : "lwj", "ok" : 1 }
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
test 0.000GB
> 恢復數據庫
[root@localhost ~]# ls /opt/lwj-back.json/*
lwj.bson lwj.metadata.json test.bson test.metadata.json
[root@localhost ~]# mongorestore -d lwj -c lwj /opt/lwj-back.json/lwj/lwj.bson
2023-08-15T14:22:08.515+0800 checking for collection data in /opt/lwj-back.json/lwj/lwj.bson
2023-08-15T14:22:08.516+0800 reading metadata for lwj.lwj from /opt/lwj-back.json/lwj/lwj.metadata.json
2023-08-15T14:22:08.520+0800 restoring lwj.lwj from /opt/lwj-back.json/lwj/lwj.bson
2023-08-15T14:22:08.581+0800 no indexes to restore
2023-08-15T14:22:08.581+0800 finished restoring lwj.lwj (4 documents, 0 failures)
2023-08-15T14:22:08.581+0800 4 document(s) restored successfully. 0 document(s) failed to restore.登陸mongo進行驗證
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
lwj 0.000GB
test 0.000GB
> use lwj
switched to db lwj
> show tables
lwj
> db.lwj.find()
{ "_id" : ObjectId("64dae9e52e7071ebd2631dcd"), "id" : "2", "name" : "lwj2" }
{ "_id" : ObjectId("64dae9e52e7071ebd2631dce"), "id" : "3", "name" : "lwj3" }
{ "_id" : ObjectId("64dae9e52e7071ebd2631dcf"), "id" : "4", "name" : "lwj4" }
{ "_id" : ObjectId("64dae4232e7071ebd2631dcc"), "id" : "1024", "name" : "lwj1" }
>
刪除集合
> db.lwj.drop()
trup
> use lwj
switched to db hy
> show tables
>
恢復lwj集合
[root@localhost hy]# mongoimport -d hy -c lwj /opt/lwj-back.json
2023-08-15T10:02:27.858+0800 connected to: mongodb://localhost/
2023-08-15T10:02:27.861+0800 6 document(s) imported successfully. 0 document(s) failed to import.
##查看
> show tables
lwj
> db.test.find()
{ "_id" : ObjectId("64dae9e52e7071ebd2631dcd"), "id" : "2", "name" : "lwj2" }
{ "_id" : ObjectId("64dae9e52e7071ebd2631dce"), "id" : "3", "name" : "lwj3" }
{ "_id" : ObjectId("64dae9e52e7071ebd2631dcf"), "id" : "4", "name" : "lwj4" }
{ "_id" : ObjectId("64dae4232e7071ebd2631dcc"), "id" : "1024", "name" : "lwj1" }
>
除此之外表還可以導入到其它的庫,創建一個新庫yes,把集合test導入?
##創建庫
> show dbs
admin 0.000GB
config 0.000GB
hy 0.000GB
local 0.000GB
> use yes
switched to db yes
> db.createCollection('hy')
{ "ok" : 1 }
> show dbs
admin 0.000GB
config 0.000GB
hy 0.000GB
local 0.000GB
yes 0.000GB
> show tables
hy
>
##把集合test導入yes
[root@localhost hy]# mongoimport -d yes -c test /opt/test-back.json
2023-08-15T10:06:57.990+0800 connected to: mongodb://localhost/
2023-08-15T10:06:57.993+0800 6 document(s) imported successfully. 0 document(s) failed to import.
##驗證
> show tables
hy
test
> db.test.find()
{ "_id" : ObjectId("64da3428cbf20d8dc76b3349"), "id" : "2", "name" : "hy2", "age" : "666" }
{ "_id" : ObjectId("64da3428cbf20d8dc76b334a"), "id" : "3", "name" : "hy3", "age" : "20" }
{ "_id" : ObjectId("64da3e5ccbf20d8dc76b334b"), "id" : "2", "name" : "hy4", "age" : "666" }
{ "_id" : ObjectId("64da3e5ccbf20d8dc76b334c"), "id" : "2", "name" : "hy5", "age" : "666" }
{ "_id" : ObjectId("64da414bcbf20d8dc76b334d"), "id" : "7", "name" : "hy7", "age" : 120 }
{ "_id" : ObjectId("64da337fcbf20d8dc76b3348"), "id" : "99", "name" : "hy1", "age" : "88" }